VBA 코드 예시로 돌아가기

VBA 배열에서 값 검색하기

이 튜토리얼에서는 VBA에서 배열의 값을 검색하는 방법을 보여드립니다.

배열이 1차원인지 다차원인지에 따라 배열에서 문자열을 검색하는 방법에는 여러 가지가 있습니다.

1차원 배열에서 검색하기

1차원 배열에서 값을 검색하려면 필터 함수를 사용할 수 있습니다.

Dim z As Variant
'원본 배열을 필터링합니다
  z = Filter(Array, String, True, vbCompareBinary)

필터 옵션의 구문은 다음과 같습니다.

Filter(원본 배열, 검색 문자열, [Include as Boolean], [Compare as vbCompareMethod])

원본 배열검색 문자열은 필수옵션이고 Include as BooleanCompare as vbCompareMethod는 선택사항입니다. 이 옵션이 포함되지 않을 경우 기본값으로 각각 TruevbCompareBinary로 설정됩니다.

필터와 일치하는 값 찾기

Sub FindBob()
   '배열을 생성합니다
   Dim strName() As Variant
   strName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")
   
   '필터링 데이터를 저장할 변수를 선언합니다
   Dim strSubNames  As Variant

  '원본 배열을 피렅링합니다
   strSubNames = Filter(strName, "Bob")

   'UBound 값이 -1보다 크면 값이 발견된 것입니다
   If UBound(strSubNames ) > -1 Then MsgBox ("Bob으 검색되었습니다")
End Sub

두 번째 배열에는 필터가 찾은 값이 저장됩니다. UBound 값이 -1이 아니라면 배열이 검색한 값을 찾은 것입니다.

또한 원래 배열에 텍스트가 몇 번이나 표시되었는지도 확인할 수 있습니다.

Sub CountNames()
   'Create array
   Dim strName() As Variant
   strName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")

  '필터링 데이터를 저장할 변수를 선언합니다
   Dim strSubNames As Variant

   '원본 배열을 피렅링합니다
   strSubNames = Filter(strName, "Bob")

   'UBound값에 1을 더하면 텍스트가 나타나는 횟수를 구할 수 있습니다
   Msgbox  UBound(strSubNames) + 1 & " 건의 검색결과가 있습니다." 
End Sub

필터와 일치하지 않는 값 찾기

The [Include as Boolean] 옵션을 사용하면 배열에서 필터와 일치하지 않는 값의 수를 찾을 수 있습니다.

Sub CountExtraNames() 
  '배열을 생성합니다
  Dim strName() As Variant 
  strName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams") 

  '필터링 데이터를 저장할 변수를 선언합니다
  Dim strSubNames As Variant 

  '원본 배열을 필터링합니다
  strSubNames = Filter(strName, "Bob", False) 

  'UBound값에 1을 더하면 텍스트가 나타나는 횟수를 구할 수 있습니다
  Msgbox  UBound(strSubNames) + 1 & " 건의 검색결과가 있습니다." 
End Sub

Filter 함수에서 선택옵션을 변경하였습니다.

strSubNames = Filter(strName, "Bob")

아래와 같이 False를 입력하였습니다:

strSubNames = Filter(strName, "Bob", False)

위 코드를 사용하면 “Bob”과 일치하지 않는 모든 이름을 반환합니다.

대소문자 구분 필터

필터는 기본적으로 대소문자를 구분합니다. 이는 모든 VBA 함수에 해당됩니다. 대소문자를 구분하지 않는 텍스트를 검색하려면 코드를 약간 수정해야 합니다.

z = Filter(strName, "bob",, vbTextCompare)

Filter 옵션에 vbTextCompare를 추가하면 코드에서 “bob” 도는 Bob”을 찾을 수 있습니다. 이를 생략하면 VBA는 기본적으로 정확히 일치하는 데이터만 찾는 vbBinaryCompare를 사용합니다. 위 예제에서는 [Include as Boolean] 인수를 생략했으므로 기본값인 True가 설정됩니다.

Option Compare Text

또는 모듈 상단에 텍스트 Option Compare Text 를 추가하면 해당 모듈에서 작성하는 모든 함수가 대소문자를 구분하지 않게 됩니다.

반복문을 사용하여 배열 검색하기

반복문을 사용하는 것은 필터 함수를 사용하는 것보다 조금 더 복잡합니다. 배열의 모든 값을 반복하는 함수를 만들 수 있습니다.

Sub LoopThroughArray()
  '배열을 생성합니다
  Dim strName() As Variant 
  strName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams") 

Dim strFind as string 
strFind = "Bob"

Dim i As Long
'배열을 반복합니다
   For i = LBound(strName, 1) To UBound(strName, 1)
       If InStr(strName(i), strFind) > 0 Then
          MsgBox "Bob 이 검색되었습니다"
          Exit For
       End If
    Next i
End Sub

텍스트 문자열의 일부, 즉 “Bob Smith” 또는 “Bob Williams”가 아닌 “Bob”이 포함된 문자열을 찾으려면 If 문에서 Instr 함수를 사용해야 했습니다. 이 함수는 배열에서 루프가 반환한 문자열에서 “Bob”이 문자열에 있는지 확인하고, 문자열에 있으면 메시지 박스를 반환한 다음 반복문을 종료합니다.

다차원 배열에서 검색하기

반복문을 사용하여 다차원 배열을 검색할 수도 있습니다. 배열의 모든 값을 반복할 수 있는 함수를 만들어야 합니다. 다차원 배열에서는 배열의 각 차원을 반복해야 합니다.

Function LoopThroughArray()
   Dim varArray() As Variant
   Dim strFind As String
   strFind = "Doctor"
'배열의 크기를 선언합니다
   ReDim varArray(1, 2)
'배열 초기화
   varArray(0, 0) = "Mel Smith"
   varArray(0, 1) = "Fred Buckle"
   varArray(0, 2) = "Jane Eyre"
   varArray(1, 0) = "Accountant"
   varArray(1, 1) = "Secretary"
   varArray(1, 2) = "Doctor"
'반복문에 사용될 변수를 정의합니다
   Dim i As Long, j As Long
'첫번째 차원에 대한 반복문을 만듭니다
   For i = LBound(varArray, 1) To UBound(varArray, 1)
'두번째 차원에 대한 반복문을 만듭니다 
      For j = LBound(varArray, 2) To UBound(varArray, 2)
'값을 찾으면 단어가 발견되었다는 메시지박스를 표시하고 함수를 종료합니다
         If varArray(i, j) = strFind Then
            MsgBox "Doctor 단어가 발견되었습니다!"
            Exit Function
         End If
      Next j
   Next i
End Function

 

 

vba-free-addin

VBA 코드 예시 추가 기능

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

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

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

무료 다운로드

VBA 코드 예시로 돌아가기