VBA AutoFilter 배열을 이용한 다중 선택 방법

⌜ VBA AutoFilter 배열을 이용한 다중 선택 방법 ⌟

안녕하세요. 창원에 서식하고 있는 BIG MAN입니다.

엑셀에서 Filter 기능은 정말 유용한 기능이고, 가장 많이 사용되는 기능 중 하나입니다. VBA에서도 그 유용함은 변하지가 않습니다. 그런데 보통 사용자가 Filter를 사용할 때는 하나의 요소만 Filter 하는 경우는 드물죠. Rows의 개수가 많을수록 Filter의 요소는 늘어나고 다중 선택을 해야 할 경우가 늘어날 수밖에 없습니다. 그래서 오늘은 이렇게 다중 선택을 하는 방법에 대해 알아보겠습니다.

 

주의) 포스팅되는 모든 글은 게시자의 주관적인 관점이 포함되어 있으며, 절대적인 가이드가 아닙니다. 포스팅 글을 참조 후 발생되는 모든 책임은 본인에게 있음을 알려드립니다.

 

아래와 같이 B3 셀의 열(Column)에는 "1월 입고"부터 "12월 입고" 데이터가 입력되어있고, C3 셀에는 해당하는 값들이 간단하게 rnd 함수로 생성하여 입력하였다. (시작 셀과 열은 예제와 같이 주변에 다른 데이터가 없는 경우 가능한 점 참조 바란다.)

데이터가 입력되어 있는 양식

사용자가 8월 입고만 필터 하고 싶은 경우라면 아래와 같이 입력하고 실행하면 된다.

' 셀 "B3"에서 시작하고, 시작 위치에서 "월 입고" 값이있는 Field는 첫 번째 열이기 때문에 1을 입력한다. 
' Criteria1에 Filter 값을 입력하면 된다.

Range("B3").AutoFilter Field:=1, Criteria1:="8월 입고"

만약 2개의 조건을 필터 할 경우라면, 아래와 같이 Operator와 Criterial2를 추가하면 된다.

' Filter 값이 1개인 경우와 동일하고, Operator:=xlOr 인수와 Criteria2에  두 번째 Filter 값을 입력한다.
Range("B3").AutoFilter Field:=1, Criteria1:="8월 입고", Operator:=xlOr, Criteria2:="2월 입고"

(Operator의 설명은 아래 마이크로소프트 지침서를 참조 바란다. 역시 Reference를 많이 봐야한다.)

 

위와 같은 방법으로 필터 할 수 있는 최대 조건은 2개이다. 하지만, 사용자는 최대 2가지만 Filter하지 않는다. 아래처럼 3가지 조건 이상 Filter 하는 경우가 더 많다.

그럼 지금부터는 오늘의 주제인 3개 이상의 Filter 값을 사용하고 싶은 경우 어떻게 하는지 알아보자. 생각보다 간단하니 쉽게 따라올 수 있을 것이다.

' 변수 선언
Dim FilterArray()           As Variant

' 배열 생성 - 다양한 방법으로 배열을 작성하면 된다. 아래는 예시일 뿐이다.
FilterArray = Array("1월 입고", "4월 입고", "8월 입고", "9월 입고", "12월 입고")

' 셀 "B3"에서 시작하고, 시작 위치에서 "월 입고" 값이 있는 Field는 첫 번째 열이기 때문에 1을 입력한다.
' Criterial1의 값에는 Array라고 입력하고 배열 변수를 입력하면 된다.
' 마지막으로 Operator는 xlFilterValues를 반드시 입력해야 한다. 그렇지 않으면 변수의 마지막 값인 "12월 입고"만 Filter 된다.
Range("B5").AutoFilter Field:=1, Criteria1:=Array(FilterArray), Operator:=xlFilterValues

(Operator의 설명은 아래 마이크로소프트 지침서를 참조 바란다. 역시 Reference를 많이 봐야한다.)

 

만약 필터 값이 항상 고정되어 있는 경우 굳이 배열을 생성할 필요는 없다. 아래와 같이 코딩해도 좋다. 하지만, 그리 추천하고 싶지는 않지만, 성향에 따라 방법을 선택해서 코딩하면 될 것이다.

Range("B5").AutoFilter Field:=1, Criteria1:=Array("1월 입고", "4월 입고", "8월 입고", "9월 입고", "12월 입고"), _
Operator:=xlFilterValues

 

추가로 AutoFiler의 Criteria1의 Filter 값에는 와이드카드 사용도 가능하다. 예를 들어 품명에 "애플 아이맥", "삼성 갤럭시", "애플 맥미니", "애플 맥 프로", "삼성 태블릿"이라는 데이터에서 애플이 포함된 값만 Filter 해야 할 경우는 아래와 같이하면 된다. (예제파일에는 없음. 그냥 참조 바란다.)

Range("B3").AutoFilter Field:=1, Criteria1:="*애플*"

그럼 "애플"이 포함된  "애플 아이맥", "애플 맥미니", "애플 맥 프로" 만 Filter 된 것을 확인할 수가 있다.

 

✅ 참고

2021.07.05 - VBA Outlook Categories Remove, ADD - 범주 색상 제거 및 추가

2021.06.28 - VBA 변화는 Column 위치 쉽게 찾기

2021.06.22 - VBA 배열의 최소 크기와 최대 크기를 알려주는 LBound와 UBound 함수

2021.06.24 - VBA 실행 속도를 올리는 쉬운 방법 Application.ScreenUpdating = False

2021.06.21 - VBA 입력된 값이 숫자인지 확인하는 IsNumeric 함수

Filter.Operator의 속성 - 마이크로소프트 Excel Reference

 

✅ 자료

AutoFilter_01.xlsm
0.02MB

 

728x90