VLOOKUP은 편리하지만 제약이 있어요.
찾을 값이 반드시 범위의 첫 번째 열에 있어야 하고, 오른쪽 방향만 검색 가능하죠.
INDEX+MATCH 조합은 이런 제약 없이 어떤 방향으로든 값을 찾을 수 있어요.
XLOOKUP을 사용할 수 없는 Excel 2019 이하 환경에서 특히 유용합니다.
이 글에서는 INDEX와 MATCH 각각의 역할, 조합 방법, VLOOKUP과의 비교, 실무 예제를 다룹니다.
MATCH 함수 - 위치 찾기
=MATCH(찾을값, 찾을범위, 일치유형)
MATCH는 값이 범위에서 몇 번째에 있는지 "위치(순번)"를 반환하는 함수예요.
값 자체를 가져오는 게 아니라, 위치만 알려줍니다.
| 인수 | 설명 |
|---|---|
| 찾을값 | 검색할 값 |
| 찾을범위 | 검색 대상 범위 (1열 또는 1행) |
| 일치유형 | 0=정확히 일치, 1=이하, -1=이상 |
실무에서는 거의 항상 일치유형을 0(정확히 일치)으로 사용해요.
예시:
| A | |
|---|---|
| 2 | 사과 |
| 3 | 바나나 |
| 4 | 포도 |
| 5 | 딸기 |
=MATCH("포도",A2:A5,0)
결과: 3 (A2:A5 범위에서 "포도"는 3번째)
MATCH는 단독으로는 잘 사용하지 않아요.
INDEX 함수와 함께 써야 실질적인 데이터를 가져올 수 있습니다.
INDEX 함수 - 위치로 값 가져오기
=INDEX(범위, 행번호, [열번호])
INDEX는 범위에서 지정한 행번호(와 열번호)에 해당하는 값을 반환해요.
| 인수 | 설명 |
|---|---|
| 범위 | 값을 가져올 범위 |
| 행번호 | 범위에서 몇 번째 행 |
| 열번호 | (선택) 범위에서 몇 번째 열 |
예시:
| A | B | |
|---|---|---|
| 2 | 사과 | 1,200 |
| 3 | 바나나 | 2,500 |
| 4 | 포도 | 3,800 |
| 5 | 딸기 | 4,000 |
=INDEX(B2:B5,3)
결과: 3800 (B2:B5 범위의 3번째 값)
INDEX도 단독으로 쓰면 행번호를 직접 입력해야 해서 불편해요.
MATCH가 위치를 자동으로 알려주면 INDEX가 그 위치의 값을 가져오는 구조로 조합합니다.
INDEX + MATCH 조합
=INDEX(반환범위, MATCH(찾을값, 찾을범위, 0))
동작 순서는 이래요.
- MATCH가 찾을값의 위치(행번호)를 구함
- INDEX가 그 행번호에 해당하는 값을 반환범위에서 가져옴
위 예시 데이터에서 "포도"의 가격을 찾으려면:
=INDEX(B2:B5, MATCH("포도",A2:A5,0))
풀어보면:
- MATCH("포도",A2:A5,0) → 3
- INDEX(B2:B5, 3) → 3800
결과: 3800
실무 예제 1 - 제품코드로 정보 조회
데이터 (A2:D7):
| A | B | C | D | |
|---|---|---|---|---|
| 2 | P001 | 무선마우스 | IT기기 | 25,000 |
| 3 | P002 | 키보드 | IT기기 | 45,000 |
| 4 | P003 | 모니터암 | 가구 | 38,000 |
| 5 | P004 | USB허브 | IT기기 | 12,000 |
| 6 | P005 | 웹캠 | IT기기 | 55,000 |
| 7 | P006 | 책상매트 | 가구 | 18,000 |
제품코드 "P003"의 단가를 찾으려면:
=INDEX(D2:D7, MATCH("P003",A2:A7,0))
결과: 38000
제품명을 찾으려면 반환범위만 바꾸면 돼요:
=INDEX(B2:B7, MATCH("P003",A2:A7,0))
결과: 모니터암
실무 예제 2 - 왼쪽 방향 검색 (VLOOKUP 불가)
제품명으로 제품코드를 찾는 역방향 검색이에요.
VLOOKUP으로는 불가능하지만 INDEX+MATCH로는 가능합니다.
=INDEX(A2:A7, MATCH("웹캠",B2:B7,0))
결과: P005
찾을범위(B열)와 반환범위(A열)가 어디에 있든 상관없어요.
두 범위의 행 수만 같으면 됩니다.
실무 예제 3 - 행과 열 모두 검색 (교차 조회)
분기별 부서 매출표에서 특정 부서의 특정 분기 값을 찾는 예제입니다.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Q1 | Q2 | Q3 | Q4 | |
| 2 | 영업팀 | 450 | 380 | 520 | 490 |
| 3 | 개발팀 | 200 | 250 | 180 | 220 |
| 4 | 기획팀 | 150 | 170 | 160 | 190 |
"개발팀"의 "Q3" 매출을 찾으려면:
=INDEX(B2:E4, MATCH("개발팀",A2:A4,0), MATCH("Q3",B1:E1,0))
풀어보면:
- MATCH("개발팀",A2:A4,0) → 2 (2번째 행)
- MATCH("Q3",B1:E1,0) → 3 (3번째 열)
- INDEX(B2:E4, 2, 3) → 180
결과: 180
이처럼 INDEX에 열번호 인수까지 사용하면 2차원 교차 조회가 가능해요.
VLOOKUP vs INDEX+MATCH 비교
| 항목 | VLOOKUP | INDEX+MATCH |
|---|---|---|
| 검색 방향 | 오른쪽만 | 양방향 |
| 열 삽입/삭제 영향 | 열번호 틀어질 수 있음 | 영향 없음 |
| 교차 조회 | 불가 | 가능 (행+열 MATCH) |
| 수식 길이 | 짧음 | 상대적으로 김 |
| 학습 난이도 | 쉬움 | 약간 높음 |
| 사용 가능 버전 | 모든 버전 | 모든 버전 |
VLOOKUP이 간단한 작업에는 더 편리해요.
하지만 왼쪽 방향 검색이 필요하거나, 열 구조가 자주 바뀌는 시트에서는 INDEX+MATCH가 안정적입니다.
Excel 2021 이상이라면 XLOOKUP(5편 참고)이 두 조합의 장점을 모두 갖추고 있어서 가장 편합니다.
자주 하는 실수 / 주의사항
1. 찾을범위와 반환범위의 행 수 불일치
MATCH의 찾을범위와 INDEX의 반환범위 행 수가 다르면 잘못된 값이 반환돼요.
두 범위의 시작 행과 끝 행을 맞춰주세요.
잘못된 예: =INDEX(B2:B7, MATCH("P003",A2:A8,0)) → 범위 크기 불일치
올바른 예: =INDEX(B2:B7, MATCH("P003",A2:A7,0)) → 둘 다 6행
2. MATCH의 일치유형 0을 빠뜨리는 경우
MATCH의 세 번째 인수를 생략하면 기본값이 1(이하 검색)이에요.
정확히 일치하는 값을 찾으려면 반드시 0을 넣어야 합니다.
=MATCH("P003",A2:A7) → 일치유형 1 (유사일치, 의도와 다를 수 있음)
=MATCH("P003",A2:A7,0) → 정확히 일치
3. #N/A 오류 처리
찾을 값이 범위에 없으면 MATCH가 #N/A를 반환하고, INDEX도 오류가 나요.
IFERROR로 감싸서 처리합니다.
=IFERROR(INDEX(B2:B7, MATCH(G2,A2:A7,0)), "해당 없음")
관련 함수 안내
INDEX+MATCH는 SUMPRODUCT 함수와 조합하면 다중 조건 검색도 가능해요.
다만 수식이 복잡해지므로, 다중 조건이 필요하다면 Excel 2021 이상에서 XLOOKUP이나 FILTER 함수를 사용하는 것이 더 간편합니다.
다음 글에서는 엑셀 데이터 유효성 검사를 다룰 예정이에요.
드롭다운 목록 만들기, 입력값 제한 등 데이터 입력 오류를 방지하는 기능입니다.
'엑셀' 카테고리의 다른 글
| 엑셀 CONCATENATE TEXTJOIN 함수 사용법 - 텍스트 합치기 (1) | 2026.02.18 |
|---|---|
| 엑셀 데이터 유효성 검사 사용법 - 드롭다운 목록과 입력 제한 (0) | 2026.02.18 |
| 엑셀 텍스트 함수 LEFT RIGHT MID TEXT 사용법 (0) | 2026.02.17 |
| 엑셀 피벗테이블 만들기 - 기초부터 실무 활용까지 (0) | 2026.02.16 |
| 엑셀 XLOOKUP 함수 사용법 - VLOOKUP의 한계를 넘는 검색 함수 (0) | 2026.02.16 |