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 코드 예시로 돌아가기

AI in the VBA Editor!

AutoMacro is the ultimate VBA add-in.

AI, Generators, UI Builders, Code Library, and More!

Learn More

AutoMacro: AI in the VBA Editor!

Learn More