VBA 배열 필터링하기
VBA Filter 함수를 사용하면 배열을 빠르게 필터링할 수 있습니다. 배열을 필터링할 때 고려해야 할 몇 가지 설정이 있습니다. 이 튜토리얼에서 Filter 함수에 대해 설명하겠습니다.
Filter 함수 – 일치 항목 필터링하기
기본적으로 VBA Filter 함수는 일치하는 항목으로 배열을 필터링합니다. 아래 예제에서는 배열 항목 중 “Smith”와 일치하는 항목을 필터링합니다.
Sub Filter_Match()
'배열을 정의합니다
Dim strNames As Variant
strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")
'배열을 필터링합니다
Dim strSubNames As Variant
strSubNames = Filter(strNames, "Smith")
'필터링된 새로운 배열 항목의 개수를 셉니다
MsgBox UBound(strSubNames) - LBound(strSubNames) + 1 & "개의 항목이 필터링되었습니다."
End Sub
몇 가지 중요한 사항이 있습니다:
- 필터링된 항목을 담을 새로운 배열 변수는 배열 크기를 정의하지 않도록 Variant 유형으로 선언해야 합니다.
- 기본적으로 필터 함수는 대소문자를 구분합니다. 따라서 “smith”를 필터링하면 “Smith”는 다른 항목으로 취급됩니다. 아래에서 대소문자 구분 설정을 변경하는 방법을 보여드리겠습니다.
Filter 함수 – 대소문자 구분하기
기본적으로 VBA는 대소문자를 구분합니다. 즉, 텍스트가 일치하려면 대/소문자도 동일해야 합니다(예: “smith”는 “Smith”와 같지 않음). 이는 Filter 함수뿐만 아니라 다른 대부분의 VBA 함수나 비교 연산자를 사용함에 있어서도 마찬가지입니다.
개인적으로 저는 VBA가 대소문자를 구분하는 것을 원하지 않기 때문에 항상 코드 모듈의 맨 위에 Option Compare Text를 추가합니다. Option Compare Text는 대소문자를 무시하여 대소문자를 구분하지 않도록 VBA에 지시합니다:
Option Compare Text
모듈 상단에 Option Compare Text를 추가하면 Filter 함수가 대소문자를 구분하지 않게 됩니다. 대소문자를 구분하지 않도록 하기 위한 다른 방법으로, Filter 함수 자체에 vbTextCompare 인수를 지정할 수 있습니다:
strSubNames = Filter(strNames, "smith", , vbTextCompare)
예제 코드는 다음과 같습니다:
Sub Filter_MatchCase()
'배열을 선언합니다
Dim strNames As Variant
strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")
'배열을 필터링합니다
Dim strSubNames As Variant
strSubNames = Filter(strNames, "smith", , vbTextCompare)
'필터링된 새로운 배열 항목의 개수를 셉니다
MsgBox UBound(strSubNames) - LBound(strSubNames) + 1 & "개의 항목이 필터링되었습니다."
End Sub
Filter 함수 – 일치하지 않는 항목 필터링하기
필터 함수를 사용하여 입력한 조건과 일치하지 않는 배열 항목을 식별하려면 Include 인수를 FALSE로 설정해야 합니다:
strSubNames = Filter(strNames, "Smith", False)
예제 코드는 다음과 같습니다:
Sub Filter_NoMatch()
'배열을 정의합니다
Dim strNames As Variant
strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")
'배열을 필터링합니다
Dim strSubNames As Variant
strSubNames = Filter(strNames, "Smith", False)
'필터링된 새로운 배열 항목의 개수를 셉니다
MsgBox UBound(strSubNames) - LBound(strSubNames) + 1 & "개의 항목이 필터링되었습니다."
End Sub
Filter 함수
VBA Filter 함수는 제공된 문자열 배열의 하위 집합을 배열로 반환합니다.
Filter 함수 구문은 다음과 같습니다:
Filter( SourceArray, Match, [Include], [Compare] )
함수 인수의 의미는 다음과 같습니다:
- SourceArray – 필터링할 원본 배열입니다
- Match – 필터링할 문자열입니다
- [Include] – (선택사항 ) TRUE로 설정할 경우일치하는 요소를 반환하고 FALSE로 설정할 경우 일치하지 않는 요소를 반환합니다
- [Compare] – (선택사항) vbBinaryCompare – 대소문자 구분, vbTextCompare – 대소문자 미구분, vbDatabaseCompare – 데이터 베이스 정보에 맞춰 비교합니다(Access 전용)