본문 바로가기
■ 칼퇴를 위한 VBA : 사례/- VBA for 엑셀

VBA를 활용한 엑셀 데이터 검색 방법

by 포탈메이커 2023. 6. 24.

VBA를 활용한 엑셀 데이터 검색 방법

엑셀은 대량의 데이터를 다루는 데 있어서 매우 효율적이지만, 때로는 많은 양의 데이터 중 원하는 정보를 찾아내는 것이 쉽지 않을 수 있습니다. 이러한 경우에는 VBA를 활용해 엑셀 데이터를 검색하는 것이 매우 유용합니다.

이번 글에서는 VBA를 활용한 엑셀 데이터 검색 방법에 대해 알아보겠습니다.

 

칼퇴키트, 업무용 도구모음

칼퇴를 위해 꼭 필요한 도구 모음을 제공합니다. 당장의 업무에 필요한 순간 사용하는 가벼운 메모장, 계산기, 변환기 등

portalmaker.backtohome.kr

 

1. Range 객체와 Find 메서드

VBA에서는 Range 객체의 Find 메서드를 사용하여 엑셀 데이터를 검색할 수 있습니다. 예를 들어, 엑셀 시트에서 "A1:D10" 범위 내에서 "apple" 이라는 단어를 검색하고자 하는 경우 아래와 같은 코드를 작성할 수 있습니다.

Sub FindData()
    Dim searchData As String
    Dim foundRange As Range

    searchData = "사과" '검색하고자 하는 단어

    Set foundRange = Range("A1:D10").Find(what:=searchData)
    If Not foundRange Is Nothing Then
        MsgBox "검색 결과: " & foundRange.Address
    Else
        MsgBox searchData & "를 찾을 수 없습니다."
    End If
End Sub

이 코드를 실행하면 "A1:D10" 범위 내에서 "apple" 이라는 단어가 처음 발견된 셀의 주소가 메시지로 출력됩니다. 만약 해당 단어가 범위 내에 없다면 "apple를 찾을 수 없습니다."라는 메시지가 출력됩니다.


2. 변수를 활용한 데이터 검색

만약 사용자가 입력한 값을 검색하고자 할 경우에는 매번 코드를 수정하여 적용하는 것이 번거로울 수 있습니다. 이런 경우에는 변수를 활용해 사용자가 입력한 값을 검색할 수 있습니다.

예를 들어, 엑셀 시트에서 "A1:D10" 범위 내에서 사용자가 입력한 값(searchData)을 검색하고자 하는 경우 아래와 같은 코드를 작성할 수 있습니다.

Sub FindData()
    Dim searchData As String
    Dim foundRange As Range

    searchData = InputBox("검색어를 입력하세요.") '입력받은 값을 검색

    Set foundRange = Range("A1:D10").Find(what:=searchData)
    If Not foundRange Is Nothing Then
        MsgBox "검색 결과: " & foundRange.Address
    Else
        MsgBox searchData & "를 찾을 수 없습니다."
    End If
End Sub

이 코드를 실행하면 입력받은 값을 "A1:D10" 범위 내에서 검색합니다. 검색 결과가 있다면 해당 셀의 주소가 메시지로 출력되고, 검색 결과가 없다면 "입력받은 값"을 찾을 수 없다는 메시지가 출력됩니다.


3. 범위 지정 및 검색 방향 설정

이전 예제에서는 "A1:D10" 범위 내에서만 데이터를 검색했습니다. 하지만 엑셀 시트는 대개 이와 같은 큰 범위를 다루는 경우보다 더 큰 범위에서 데이터를 검색해야 하는 경우가 많습니다. 이러한 경우에는 범위를 확장하여 검색할 수 있습니다.

또한, 검색 방향 역시 설정할 수 있습니다. 아래 코드는 "Sheet1" 시트에서 "A1:D1000" 범위 내에서 "apple" 이라는 단어를 검색하고자 하는 경우를 나타냅니다. 검색 방향은 xlNext로 설정되어 있으며, xlValues는 값을 기준으로 검색하겠다는 것을 뜻합니다.

Sub FindData()
    Dim searchData As String
    Dim foundRange As Range

    searchData = InputBox("검색어를 입력하세요.") '입력받은 값을 검색

    Set foundRange = Sheets("Sheet1").Range("A1:D1000").Find( _
        what:=searchData, _
        After:=Sheets("Sheet1").Range("D1000"), _
        LookIn:=xlValues, _
        LookAt:=xlPart, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False _
    )

    If Not foundRange Is Nothing Then
        MsgBox "검색 결과: " & foundRange.Address
    Else
        MsgBox searchData & "를 찾을 수 없습니다."
    End If
End Sub

이 코드를 실행하면 "Sheet1" 시트에서 "A1:D1000" 범위 내에서 "apple" 이라는 단어를 검색하며, 검색 결과가 있다면 해당 셀의 주소가 메시지로 출력됩니다. 검색 결과가 없다면 "apple를 찾을 수 없습니다."라는 메시지가 출력됩니다.


4. 조건에 따른 데이터 검색

범위 내에서 값이 아니라 조건에 따른 데이터 검색을 하고자 할 경우에는 Find 메서드 대신 Autofilter 메서드를 활용할 수도 있습니다. 아래 코드는 "Sheet1" 시트에서 "A1:D1000" 범위 내에서 "오케이" 값보다 큰 값들만 필터링하는 예제입니다.

Sub FilterData()
    Dim dataRange As Range
    
    Set dataRange = Sheets("Sheet1").Range("A1:D1000")
    dataRange.AutoFilter field:=3, criteria1:=">오케이"
End Sub

이 코드를 실행하면 "A1:D1000" 범위 내에서 세 번째 컬럼에서 "오케이" 값보다 큰 값들만 필터링됩니다.


5. 마치며

이상으로 VBA를 이용한 엑셀 데이터 검색 방법에 대한 설명을 마칩니다. 엑셀 시트에서 필요한 데이터를 검색하는 데 아무리 복잡한 쿼리를 작성하더라도, VBA를 활용하면 효율적이고 빠른 검색이 가능합니다. 이를 통해 엑셀 시트에서 데이터를 더 효율적으로 다룰 수 있게 되었습니다.



포스팅이 도움이 되셨다면 구독, 공감, 댓글 부탁드려요!

행복한 하루 되세요!