VBA 배열 필터링하기

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 5월 4, 2023

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 전용)
vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기