엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터를 찾아 추가하는 방법

 

환경: Microsoft Excel 2013

 

오늘 구현한 내용은 지금까지 질문이 많았던 것입니다. 매크로를 이용해서 다른 셀이나 워크시트에 있는 내용들을 잘라서 붙여 달라는 것이죠. 여기에 덧붙여 동일한 코드에 데이터를 찾아 해당하는 값을 매칭하는 것입니다. 정리해야 되는 데이터가 많을 경우 아주 유용한 샘플 코드입니다.

 

오늘 구현할 내용은 그림에 표시한 것과 같습니다. C 데이터의 코드값을 A 데이터 코드값과 비교해 동일한 데이터가 있다면 수량을 복사하는 것이죠.

엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터를 찾아 추가하는 방법

 

초보자님들을 위해서 프로그램 작성법의 기초부터 알려 드리겠습니다. 먼저 어떻게 프로그램을 구현할지 글로 써서 단계별로 표현을 해야 합니다. 예를 들어 아래 구현할 내용을 단계별로 구분해 보겠습니다. 내용은 사람들 마다 자기만의 방식이 있기 때문에 같을 수 없습니다. 중요한 것은 무작정 코드를 짜겠다고 덤비지 말고 어떤 단계를 거쳐야 하는지 글로 써야 한다는 것입니다.

 

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 값 복사에 대해 알아 보았습니다

엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터를 찾아 추가하는 방법


Posted by 녹두장군