[엑셀 고급 기술] VLOOKUP보다 100배 강력한 INDEX & MATCH 함수 개꿀팁

728x90
  • INDEX와 MATCH 함수 기본 개념 이해하기
  • 왜 VLOOKUP 대신 INDEX-MATCH를 사용해야 할까?
  • INDEX 함수 상세 사용법 및 예제
  • MATCH 함수 상세 사용법 및 예제
  • INDEX-MATCH 조합 활용 실전 예제
  • INDEX-MATCH-MATCH로 2차원 검색 마스터하기
  • 자주 발생하는 오류와 해결 방법
  • 실무에서 빛을 발하는 고급 활용 팁

🧩 INDEX와 MATCH 함수 기본 개념 이해하기

엑셀을 사용하다 보면 VLOOKUP이나 HLOOKUP 함수의 한계에 부딪히는 순간이 옵니다. 이럴 때 진정한 엑셀 마스터들이 사용하는 것이 바로 INDEX와 MATCH 함수의 조합입니다. 이 두 함수를 함께 사용하면 엑셀 데이터 검색의 새로운 세계가 열립니다.

INDEX 함수란?

INDEX 함수는 지정된 범위에서 특정 위치(행과 열)에 있는 값을 반환합니다. 마치 좌표를 이용해 보물지도에서 보물을 찾는 것과 같습니다.

기본 구문:

=INDEX(배열, 행_번호, [열_번호], [영역_번호])

  • 배열: 검색할 셀 범위(예: A1:D10)
  • 행_번호: 배열 내에서 찾고자 하는 행 번호
  • 열_번호: 배열 내에서 찾고자 하는 열 번호 (생략 가능)
  • 영역_번호: 여러 영역이 있는 참조에서 사용할 영역 (대부분 생략)

MATCH 함수란?

MATCH 함수는 지정된 범위 내에서 특정 값의 상대적 위치(인덱스)를 찾아 반환합니다. 쉽게 말해, "이 값이 목록에서 몇 번째에 있나요?"라고 물어보는 것과 같습니다.

기본 구문:

=MATCH(찾을_값, 찾을_범위, [일치_유형])

  • 찾을_값: 범위 내에서 찾고자 하는 값
  • 찾을_범위: 검색할 셀 범위(예: A1:A10)
  • 일치_유형:
    • 0: 정확히 일치하는 항목 찾기 (가장 많이 사용)
    • 1: 찾을_값보다 작거나 같은 가장 큰 값 찾기 (정렬된 오름차순 데이터)
    • -1: 찾을_값보다 크거나 같은 가장 작은 값 찾기 (정렬된 내림차순 데이터)

🔄 왜 VLOOKUP 대신 INDEX-MATCH를 사용해야 할까?

VLOOKUP은 엑셀 입문자들이 가장 먼저 배우는 검색 함수지만, 다음과 같은 여러 한계가 있습니다:

1. 오른쪽으로만 검색 가능

VLOOKUP은 기준 열의 왼쪽에 있는 데이터를 찾을 수 없습니다. 항상 첫 번째 열에서 찾기 시작하여 오른쪽으로만 데이터를 가져올 수 있습니다.

2. 열 삽입/삭제 시 문제 발생

VLOOKUP은 열 번호를 직접 참조하기 때문에, 데이터 사이에 열을 삽입하거나 삭제하면 함수가 잘못된 열을 참조할 수 있습니다.

3. 성능 이슈

대용량 데이터에서 VLOOKUP은 INDEX-MATCH보다 계산 속도가 느립니다.

4. 대략적 일치 사용 시 정렬 필요

VLOOKUP에서 대략적 일치(TRUE)를 사용할 때는 데이터가 오름차순으로 정렬되어 있어야 합니다.

반면, INDEX-MATCH 조합은 이러한 한계를 모두 극복합니다:

  • 어느 방향으로든 검색 가능 (왼쪽, 오른쪽, 위, 아래)
  • 열 삽입/삭제에 영향을 받지 않음
  • 대용량 데이터에서 더 빠른 성능
  • 더 유연한 검색 옵션

📊 INDEX 함수 상세 사용법 및 예제

INDEX 함수는 단독으로도 매우 유용합니다. 몇 가지 예제를 통해 INDEX 함수의 기능을 자세히,알아보겠습니다.

기본 사용법: 특정 위치의 값 찾기

다음과 같은 표가 있다고 가정해 봅시다:

    A       B       C       D
1   이름    부서    직급    월급
2   김철수  영업부  대리    350만원
3   이영희  인사부  과장    420만원
4   박지민  개발부  사원    300만원
5   최준호  마케팅  차장    480만원

이 데이터에서 3행 2열(인사부)의 값을 가져오려면:

=INDEX(A2:D5, 2, 2)

결과: "인사부"

여기서:

  • A2:D5는 검색할 배열
  • 2는 배열 내에서의 행 번호(이영희 행)
  • 2는 배열 내에서의 열 번호(부서 열)

행만 지정하기: 행 전체 반환

INDEX 함수에서 열 번호를 생략하면 해당 행 전체의 참조를 반환합니다:

=INDEX(A2:D5, 3, )

이 함수는 3번째 행(박지민 행) 전체를 참조합니다. 이 참조를 다른 함수와 함께 사용하려면 추가 연산이 필요합니다.

열만 지정하기: 열 전체 반환

행 번호를 0으로 설정하면 열 전체를 참조합니다:

=INDEX(A2:D5, 0, 3)

이 함수는 3번째 열(직급 열) 전체를 참조합니다.

배열 반환: 여러 셀 한번에 가져오기

INDEX 함수는 여러 셀을 한번에 반환할 수도 있습니다:

=INDEX(A2:D5, 1:2, 3:4)

이 함수는 1~2행, 3~4열에 해당하는 2x2 배열을 반환합니다(김철수와 이영희의 직급과 월급).


🔍 MATCH 함수 상세 사용법 및 예제

MATCH 함수를 통해 배열 내에서 특정 값의 위치를 찾는 방법을 알아보겠습니다.

기본 사용법: 정확한 값의 위치 찾기

앞서 본 직원 데이터에서 "박지민"의 위치를 찾으려면:

=MATCH("박지민", A2:A5, 0)

결과: 3

"박지민"은 A2:A5 범위에서 3번째 위치에 있습니다.

일치 유형 0: 정확한 일치

일치 유형 0은 정확히 일치하는 항목을 찾습니다:

=MATCH("개발부", B2:B5, 0)

결과: 3 (개발부는 B4에 있으므로, 범위 B2:B5에서 3번째 위치)

일치 유형 1: 근사치 일치(작거나 같은)

일치 유형 1은 찾을 값보다 작거나 같은 가장 큰 값을 찾습니다. 데이터가 오름차순으로 정렬되어 있어야 합니다:

급여 데이터가 오름차순으로 정렬되어 있다고 가정:

    A       B
1   이름    급여
2   박지민  300
3   김철수  350
4   이영희  420
5   최준호  480

=MATCH(400, B2:B5, 1)

결과: 2 (400보다 작거나 같은 가장 큰 값은 350으로, 범위 내 2번째 위치)

일치 유형 -1: 근사치 일치(크거나 같은)

일치 유형 -1은 찾을 값보다 크거나 같은 가장 작은 값을 찾습니다. 데이터가 내림차순으로 정렬되어 있어야 합니다:

    A       B
1   이름    급여
2   최준호  480
3   이영희  420
4   김철수  350
5   박지민  300

=MATCH(400, B2:B5, -1)

결과: 2 (400보다 크거나 같은 가장 작은 값은 420으로, 범위 내 2번째 위치)

와일드카드 사용하기

MATCH 함수에서는 와일드카드(*와 ?)를 사용하여 패턴 매칭이 가능합니다:

=MATCH("*부", B2:B5, 0)

이 함수는 "부"로 끝나는 첫 번째 값의 위치를 반환합니다.


💡 INDEX-MATCH 조합 활용 실전 예제

이제 INDEX와 MATCH 함수를 조합하여 강력한 검색 기능을 구현하는 방법을 알아보겠습니다.

기본 INDEX-MATCH: VLOOKUP 대체하기

다시 처음의 직원 데이터를 살펴봅시다:

    A       B       C       D
1   이름    부서    직급    월급
2   김철수  영업부  대리    350만원
3   이영희  인사부  과장    420만원
4   박지민  개발부  사원    300만원
5   최준호  마케팅  차장    480만원

VLOOKUP으로 "박지민"의 월급을 찾는 함수는 다음과 같습니다:

=VLOOKUP("박지민", A2:D5, 4, FALSE)

이를 INDEX-MATCH로 바꾸면:

=INDEX(D2:D5, MATCH("박지민", A2:A5, 0))

결과: "300만원"

여기서:

  • MATCH("박지민", A2:A5, 0)는 "박지민"의 위치(3)를 찾습니다.
  • INDEX(D2:D5, 3)는 D열의 3번째 값(300만원)을 반환합니다.

왼쪽 방향 검색: VLOOKUP으로는 불가능

VLOOKUP의 큰 한계 중 하나는 왼쪽 방향으로 검색할 수 없다는 점입니다. INDEX-MATCH는 이 한계를 쉽게 극복합니다.

예를 들어, 월급이 "420만원"인 직원의 이름을 찾으려면:

=INDEX(A2:A5, MATCH("420만원", D2:D5, 0))

결과: "이영희"

여러 조건으로 검색하기: 부서와 직급으로 월급 찾기

두 가지 이상의 조건으로 검색할 때는 헬퍼 열을 만들거나 배열 수식을 사용할 수 있습니다.

예를 들어, 부서가 "개발부"이고 직급이 "사원"인 직원의 월급을 찾으려면:

방법 1: 헬퍼 열 사용

E열에 =B2&"-"&C2 형식으로 부서와 직급을 연결:

    E
2   영업부-대리
3   인사부-과장
4   개발부-사원
5   마케팅-차장

그리고 다음 함수를 사용:

=INDEX(D2:D5, MATCH("개발부-사원", E2:E5, 0))

방법 2: 배열 수식 사용

=INDEX(D2:D5, MATCH(1, (B2:B5="개발부")*(C2:C5="사원"), 0))

이 함수는 배열 수식으로 입력해야 합니다(Ctrl+Shift+Enter).

대소문자 구분 검색

MATCH 함수는 기본적으로 대소문자를 구분하지 않습니다. 대소문자를 구분하려면 EXACT 함수를 조합해야 합니다:

=INDEX(D2:D5, MATCH(TRUE, EXACT(A2:A5, "박지민"), 0))

이 함수는 배열 수식으로 입력해야 합니다(Ctrl+Shift+Enter).


🌟 INDEX-MATCH-MATCH로 2차원 검색 마스터하기

INDEX-MATCH-MATCH 조합을 사용하면 2차원 테이블에서 행과 열을 동시에 검색할 수 있습니다. 이는 VLOOKUP과 HLOOKUP으로는 직접 구현하기 어려운 기능입니다.

기본 INDEX-MATCH-MATCH 구문

=INDEX(데이터_범위, MATCH(행_기준값, 행_기준범위, 0), MATCH(열_기준값, 열_기준범위, 0))

실제 예제: 분기별 제품 판매 데이터

다음과 같은 분기별 제품 판매 데이터가 있다고 가정해 봅시다:

        B       C       D       E       F
1       제품/분기 Q1      Q2      Q3      Q4
2       노트북   120     150     180     210
3       태블릿   85      95      105     110
4       스마트폰 200     220     240     260
5       모니터   45      50      55      60

"스마트폰"의 "Q3" 판매량을 찾으려면:

=INDEX(C2:F5, MATCH("스마트폰", B2:B5, 0), MATCH("Q3", C1:F1, 0))

결과: 240

여기서:

  • MATCH("스마트폰", B2:B5, 0)는 "스마트폰"의 행 위치(3)를 찾습니다.
  • MATCH("Q3", C1:F1, 0)는 "Q3"의 열 위치(3)를 찾습니다.
  • INDEX(C2:F5, 3, 3)는 3행 3열에 있는 값(240)을 반환합니다.

동적 헤더로 작업하기

INDEX-MATCH-MATCH의 진정한 강점은 동적 헤더와 함께 사용할 때 드러납니다. 셀 참조를 사용하여 검색 기준을 동적으로 변경할 수 있습니다:

H1에 "제품:"이라고 입력하고 I1에 드롭다운 목록으로 제품을 선택할 수 있게 설정

H2에 "분기:"라고 입력하고 I2에 드롭다운 목록으로 분기를 선택할 수 있게 설정

H3에 "판매량:"이라고 입력하고 I3에 다음 함수를 입력:

=INDEX(C2:F5, MATCH(I1, B2:B5, 0), MATCH(I2, C1:F1, 0))

이제 I1과 I2의 값을 변경하면 해당하는 판매량이 자동으로 I3에 표시됩니다.


❗ 자주 발생하는 오류와 해결 방법

INDEX-MATCH를 사용하면서 자주 발생하는 오류와 그 해결 방법을 알아보겠습니다.

1. #N/A 오류

가장 흔한 오류로, 찾으려는 값이 범위 내에 없을 때 발생합니다.

해결 방법: IFERROR 함수를 사용하여 오류 처리

=IFERROR(INDEX(D2:D5, MATCH("홍길동", A2:A5, 0)), "해당 직원 없음")

2. #VALUE! 오류

함수 인수의 데이터 형식이 맞지 않을 때 발생합니다.

해결 방법: 인수의 데이터 형식 확인 및 수정

3. #REF! 오류

참조가 유효하지 않을 때 발생합니다.

해결 방법: 참조 범위 확인 및 수정

4. 대소문자 문제

기본적으로 MATCH는 대소문자를 구분하지 않습니다.

해결 방법: EXACT 함수 사용 (이미 위에서 설명)

5. 공백 문제

데이터에 보이지 않는 공백이 있으면 정확한 일치가 되지 않을 수 있습니다.

해결 방법: TRIM 함수 사용

=INDEX(D2:D5, MATCH(TRIM("박지민 "), TRIM(A2:A5), 0))

6. 배열 수식 입력 문제

일부 복잡한 INDEX-MATCH 조합은 배열 수식으로 입력해야 합니다.

해결 방법: Ctrl+Shift+Enter로 수식 입력 (Excel 365에서는 자동으로 처리됨)


🔥 실무에서 빛을 발하는 고급 활용 팁

INDEX와 MATCH 함수를 실무에서 더 효과적으로 활용할 수 있는 고급 팁을 알아보겠습니다.

1. 다중 범위에서 검색하기

여러 워크시트나 범위에서 데이터를 검색해야 할 때:

=INDEX(Sheet1:Sheet3!A1, MATCH("찾을값", Sheet1:Sheet3!A1, 0), 1)

2. 동적 범위 만들기

데이터가 자주 변경되는 경우 OFFSET 함수로 동적 범위를 만들어 사용할 수 있습니다:

=INDEX(OFFSET(A1, 0, 0, COUNTA(A:A), COUNTA(1:1)), MATCH(G1, OFFSET(A1, 0, 0, COUNTA(A:A), 1), 0), MATCH(H1, OFFSET(A1, 0, 0, 1, COUNTA(1:1)), 0))

3. INDEX-MATCH와 다른 함수 조합하기

SUM, AVERAGE 등의 함수와 함께 사용하여 더 복잡한 계산을 수행할 수 있습니다:

=SUM(INDEX(C2:F5, MATCH("스마트폰", B2:B5, 0), 0))

이 함수는 스마트폰의 모든 분기 판매량 합계를 계산합니다.

4. 부분 일치 검색으로 유연한 검색 구현

와일드카드와 함께 사용하여 부분 일치 검색을 구현할 수 있습니다:

=INDEX(D2:D5, MATCH("*지민*", A2:A5, 0))

이 함수는 "지민"이 포함된 이름을 가진 직원의 월급을 반환합니다.

5. INDEX-MATCH 중첩하기

INDEX-MATCH를 중첩하여 더 복잡한 검색을 구현할 수 있습니다:

=INDEX(D2:D5, MATCH(INDEX(A2:A5, MATCH(MAX(C2:C5), C2:C5, 0)), A2:A5, 0))

이 함수는 가장 높은 직급을 가진 직원의 월급을 반환합니다.


🎯 INDEX-MATCH 활용의 미래

자, 지금까지 INDEX와 MATCH 함수에 대해 자세히 알아봤습니다. 어떤가요?

처음에는 복잡해 보일 수 있지만, 이 두 함수의 조합은 엑셀에서 가장 강력하고 유연한 검색 방법 중 하나입니다.

일단 익숙해지면 VLOOKUP이나 HLOOKUP으로 돌아가고 싶지 않을 정도로 편리하고 강력함을 느끼게 될 거예요.

 

INDEX-MATCH 조합은 데이터 분석가, 재무 전문가, 그리고 대량의 데이터를 다루는 모든 전문가들이 반드시 마스터해야 하는 기술입니다. 특히 열이 자주 추가되거나 삭제되는 대규모 데이터셋에서 작업할 때 그 진가가 발휘됩니다.

 

최신 Excel 버전(Excel 2019 이상)에서는 XLOOKUP이라는 새로운 함수가 도입되어 INDEX-MATCH의 일부 기능을 더 간단하게 사용할 수 있게 되었습니다. 하지만 INDEX-MATCH는 여전히 더 유연하고 강력한 기능을 제공하며, 이전 버전의 Excel과의 호환성도 유지됩니다.

 

복잡한 데이터 작업을 위해 INDEX-MATCH를 마스터하는 데 투자한 시간은 결코 헛되지 않을 것입니다. 처음에는 작은 데이터셋으로 연습하면서 차근차근 익히고, 점차 더 복잡한 시나리오에 적용해 보세요. 언젠가는 "이걸 INDEX-MATCH 없이는 어떻게 해결했을까?"라는 생각이 들 정도로 익숙해질 것입니다.

728x90