본문 바로가기
업무 자동화

엑셀 VLOOKUP의 한계를 넘는 데이터 조회 자동화 (INDEX-MATCH 활용법)

by jungdabnote 2026. 2. 4.
반응형

엑셀 업무를 할 때 가장 자주 쓰는 함수를 꼽으라면 단연 VLOOKUP일 겁니다. 하지만 이 함수를 쓰다 보면 꼭 한 번씩 막히는 순간이 오곤 하죠. 바로 내가 찾으려는 기준값이 검색 범위의 가장 왼쪽이 아닐 때입니다.

이럴 때 데이터를 통째로 옮기거나 복사해서 순서를 바꾸느라 시간을 허비하셨다면, 오늘 소개해드리는 INDEX와 MATCH 함수를 결합한 자동화 매크로를 꼭 사용해 보세요. 기준이 어디에 있든 상관없이 아주 영리하게 데이터를 찾아줍니다.

1. 왜 VLOOKUP 대신 이 방식이 필요할까?

보통 VLOOKUP은 왼쪽에서 오른쪽으로만 데이터를 찾을 수 있다는 치명적인 약점이 있습니다. 하지만 업무를 하다 보면 기준값의 왼쪽에 있는 데이터를 가져와야 할 때가 훨씬 많죠.

오늘 공유해 드리는 매크로는 인덱스와 매치 함수의 장점만 합쳤습니다. 데이터가 어디에 위치해 있든 유연하게 대응할 수 있고, 특히 대량의 데이터를 한 번에 처리해야 할 때 함수를 일일이 입력할 필요가 없어 업무 속도가 획기적으로 빨라집니다.

2. 데이터 자동 조회 VBA 코드 구성

이 코드는 사용자가 조회하고 싶은 값과 원본 데이터의 위치만 지정해 주면, 알아서 결과값을 채워주는 구조입니다. 코딩을 전혀 모르셔도 아래 코드를 복사해서 그대로 활용하시면 됩니다.

먼저 엑셀 창에서 Alt + F11을 눌러 편집기를 여신 뒤, [삽입] - [모듈] 순서로 클릭하고 다음 코드를 입력해 보세요.

Sub SmartAutoLookup()
    Dim LookupValueRng As Range
    Dim SearchRng As Range
    Dim ResultRng As Range
    Dim Cell As Range
    Dim MatchIdx As Variant
    
    On Error Resume Next
    ' 조회하고 싶은 값들이 모여있는 범위를 선택합니다.
    Set LookupValueRng = Application.InputBox("조회할 데이터가 들어있는 범위를 선택해주세요.", "조회 대상 선택", Type:=8)
    If LookupValueRng Is Nothing Then Exit Sub
    
    ' 원본 데이터에서 기준이 되는 열을 선택합니다. (예: 사번 열)
    Set SearchRng = Application.InputBox("원본 데이터에서 기준이 될 열을 선택해주세요.", "기준 열 선택", Type:=8)
    If SearchRng Is Nothing Then Exit Sub
    
    ' 원본 데이터에서 실제 가져올 값이 적힌 열을 선택합니다. (예: 이름 혹은 급여 열)
    Set ResultRng = Application.InputBox("가져올 결과 데이터가 있는 열을 선택해주세요.", "결과 열 선택", Type:=8)
    If ResultRng Is Nothing Then Exit Sub
    On Error GoTo 0
    
    Application.ScreenUpdating = False
    
    ' 선택한 데이터들을 하나씩 순회하며 값을 찾아옵니다.
    For Each Cell In LookupValueRng
        ' MATCH 함수로 해당 데이터의 위치(행 번호)를 파악합니다.
        MatchIdx = Application.Match(Cell.Value, SearchRng, 0)
        
        ' 일치하는 값이 있으면 결과 열에서 해당 위치의 값을 가져옵니다.
        If Not IsError(MatchIdx) Then
            Cell.Offset(0, 1).Value = Application.WorksheetFunction.Index(ResultRng, MatchIdx)
        Else
            ' 매칭되는 값이 없을 경우 표시할 텍스트입니다.
            Cell.Offset(0, 1).Value = "미등록 데이터"
        End If
    Next Cell
    
    Application.ScreenUpdating = True
    MsgBox "모든 데이터 조회가 정상적으로 완료되었습니다.", vbInformation, "작업 완료"
End Sub

3. 실무 사용 시 참고할 점

이 매크로는 기본적으로 사용자가 선택한 셀의 오른쪽 칸에 결과값을 보여주도록 설계되어 있습니다. 만약 다른 칸에 결과를 넣고 싶다면 코드 중간의 Offset(0, 1) 숫자를 조정하면 됩니다.

또한, 원본 데이터에 정확히 일치하는 값이 있어야 값을 가져옵니다. 간혹 텍스트 사이에 보이지 않는 공백이 섞여 있으면 에러가 날 수 있으니, 데이터를 미리 깔끔하게 정리해두시면 훨씬 정확한 결과를 얻으실 수 있습니다.

4. 마치며

단순한 함수 반복 입력은 이제 엑셀에게 맡기세요. 오늘 공유해 드린 INDEX-MATCH 매크로가 여러분의 복잡한 문서 작업을 조금이나마 덜어주기를 바랍니다. 업무 효율을 높이는 데 작게나마 도움이 되었으면 좋겠습니다.

반응형