엑셀관련/vba

[EXCEL/엑셀 VBA]데이터 추출_기본코드

22rodnjf 2016. 12. 20. 21:19

엑셀을 할때 함수 만으로는 불가능한 작업들이 많이 있습니다.

그중 가장 많이 사용 되는 것은 나열된 수많은 데이터 중에서 필요한 데이터를 추출 하는 것일겁니다.


VLOOKUP함수를 사용하면 어느정도 까지는 가능하지만 사실 이것도 완벽한 방법이 될 수 없습니다.


이를 해결하기 위한 매크로 코딩 테크닉과 코드를 알려드리겠습니다.

내용이 긴 관계로 두편으로 나뉘어 포스팅하겠습니다.


먼저 추출할 데이터 값을 임의로 줬습니다.



필요값 옆의 빈칸에 [값]에 해당하는 숫자를 입력하면 위의 사진처럼 [값] 50에 해당하는 [이름] 나나와 주니엘이 추출되어 [추출값]아래에 적힙니다.


사실 이건 매크로 말고도 다양한 방법으로 할 수 있습니다. 가장 대표적인게 필터값을 적용하는 것이죠.



이렇게 필터를 적용해주고



필요한 값만 선택해서 확인을 해주면



이런식으로 남은 값이 나오고 이걸 복사해서 붙여 넣는 방식으로 필요 데이터를 추출할 수 있습니다. 하지만 매번 이런식으로 필터를 적용했다가 취소하는 방식은 번거롭기도 하고 실수로 오름차순 정렬들을 해버리게 되면 값의 틀이 모두 틀어지게 됩니다.


그럼 매크로로 코딩을 한번 해볼까요.



sub의 이름은 간단하게 데이터추출로 지정해 줍니다.

프로그래밍 코드라고 해서 꼭 영어로만 해야 하는 것은 아닙니다.

메모리를 많이 먹는 작업을 하거나 코드가 몇만줄이 되는 코딩을 할 경우에는 최적화를 위해서 영어로 작성하는 것이 좋지만 (한글과 영어의 바이트 차이) 사실 간단한 사무 자동화 프로그램을 작성하는데 그정도 까지 할 필요는 없습니다.



이렇게 완성해 줍니다.


Sub 데이터추출()


Dim 반복변수, 추출값변수 As Integer


For 반복변수 = 0 To Sheet1.Range("B1")


    If Sheet1.Range("A2").Offset(반복변수, 0) = Sheet1.Range("H1") Then

        Sheet1.Range("F2").Offset(추출값변수, 0) = Sheet1.Range("C2").Offset(반복변수, 0)

        추출값변수 = 추출값변수 + 1

    End If


Next


End Sub


코드만 놓고 보자면 이렇게 됩니다.

그럼 이 코드에 대한 상세한 분석과 더불어 이 코드를 어떻게 응용하면 좋을지 까지는 다음 포스팅에서 설명 드리겠습니다.