오늘은 지금까지 구독자 분들이 질문한 내용 중에 많이 했던 내용을 구현했습니다. 요지는 매크로를 이용해서 다른 셀이나 워크시트에 있는 내용들을 잘라서 붙이는 방법입니다. 여기에 덧붙여 동일한 코드에 데이터를 찾아 해당하는 값을 매칭하는 것도 포함 시켰습니다. 정리할 데이터가 많을 경우 아주 유용한 샘플 코드입니다.
▼ 오늘 구현할 내용은 그림에 표시한 것과 같습니다. C 데이터의 코드값을 A 데이터 코드값과 비교해 동일한 데이터가 있다면 수량을 복사하는 것이죠.
▼ 초보자님들을 위해서 프로그램 작성법의 기초부터 알려 드리겠습니다. 먼저 어떻게 프로그램을 구현할지 글로 써서 단계별로 표현을 해야 합니다. 예를 들어 아래 구현할 내용을 단계별로 구분해 보겠습니다. 내용은 사람들 마다 자기만의 방식이 있기 때문에 같을 수 없습니다. 중요한 것은 무작정 코드를 짜겠다고 덤비지 말고 어떤 단계를 거쳐야 하는지 글로 써야 한다는 것입니다.
1. A 열의 코드 값들을 메모리에 저장한다.
2. A 열의 코드 값만큼 반복한다.
2.1. A 열 코드 값 중에서 C 열에 있는지 찾아 수량 값을 변수에 저장한다.
2.2. 찾은 값이 있다면 B 열에 저장한다.
2.3. 변수를 초기화 한다.
▼ 그럼 각 단계별로 소스가 어떻게 구현되었는지 보겠습니다.
1. A 열의 코드 값들을 메모리에 저장한다.
Sheets("Sheet1").Activate Set rngList = ActiveSheet.Range("D3:D8") |
2. A 열의 코드 값만큼 반복한다.
For i = 3 To WorksheetFunction.CountA(Range("A:A")) Next i |
2.1. A 열 코드 값 중에서 C 열에 있는지 찾아 수량 값을 변수에 저장한다.
Set rngValue = rngList.Find(Range("A1").Offset(i, 0)) If Not rngValue Is Nothing Then strPrice = rngValue.End(2) ' 바로 옆에 수량 데이터 가져옴 End If |
2.2. 찾은 값이 있다면 B 열에 저장한다.
Range("B1").Offset(i, 0) = strPrice |
2.3. 변수를 초기화 한다.
strPrice = "" ' 데이터 초기화 |
▼ 위에서 작성한 전체를 합친 소스는 다음과 같습니다. 매크로 함수를 만들고 코드를 복사해서 넣습니다.
Sub move_data() Dim rngList As Range Dim rngValue As Range Dim strPrice As String Dim i As Integer '' 데이터를 선택한다. Sheets("Sheet1").Activate Set rngList = ActiveSheet.Range("D3:D8") For i = 3 To WorksheetFunction.CountA(Range("A:A")) Set rngValue = rngList.Find(Range("A1").Offset(i, 0)) If Not rngValue Is Nothing Then strPrice = rngValue.End(2) ' 바로 옆에 수량 데이터 가져옴 End If Range("B1").Offset(i, 0) = strPrice strPrice = "" ' 데이터 초기화 Next i End Sub |
매크로를 실행한 결과 원하는 대로 같은 코드값에 수량이 복사되었습니다. 이상으로 VBA 값 복사에 대해 알아 보았습니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀(Excel) VBA - 각종 코드와 소스들을 쉽게 알아내기 ▶ 엑셀 Excel 매크로 실행과 소스 편집하기 ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 ▶ 엑셀 VBA 매크로 실행 버튼으로 코드 실행하기 ▶ 엑셀 Excel 매크로 소스 디버깅으로 결과 확인하기 |