엑셀 XLOOKUP 함수 사용법 — VLOOKUP·INDEX/MATCH와 한눈에 비교
최종 업데이트 2026-07-20
엑셀의 조회(lookup) 함수는 크게 세 갈래로 발전해왔습니다. VLOOKUP(1985년대 개념) → INDEX/MATCH(방향 제약 해소) → XLOOKUP(Microsoft 365, 2019년 도입, 두 함수의 단점을 흡수). 표부터 보고 시작하겠습니다.
세 함수 한눈에 비교
| 항목 | VLOOKUP | INDEX/MATCH | XLOOKUP |
|---|---|---|---|
| 함수 개수 | 1개 | 2개 조합 | 1개 |
| 왼쪽 조회 | 불가능 | 가능 | 가능 |
| 열 번호 지정 방식 | 숫자로 직접 지정 | MATCH 위치 계산 | 범위를 직접 지정(번호 불필요) |
| 없을 때 기본값 | IFERROR로 별도 처리 | IFERROR로 별도 처리 | 네 번째 인수에 바로 지정 |
| 여러 열 동시 반환 | 불가능(열마다 각각 작성) | 불가능(열마다 각각 작성) | 가능(반환범위를 여러 열로 지정) |
| 뒤에서부터 검색 | 불가능 | 가능(MATCH 옵션) | 가능(검색모드 -1) |
| 최소 지원 버전 | 모든 버전 | 모든 버전 | 엑셀 2021, Microsoft 365 |
기본 구조와 실제 데이터 예시
=XLOOKUP(찾을값, 찾을범위, 반환범위, [없을때값], [일치모드], [검색모드])
| A열(사번) | B열(이름) | C열(부서) | D열(입사일) |
|---|---|---|---|
| A102 | 김민수 | 영업1팀 | 2022-03-02 |
| A103 | 이서연 | 총무팀 | 2021-07-15 |
| A104 | 박지훈 | 영업2팀 | 2023-01-10 |
F2에 'A103'을 입력했을 때 이름과 부서를 동시에 G2:H2에 반환하고 싶다면, 반환범위를 B:C처럼 두 열로 지정한 뒤 결과를 한 번만 입력해도 자동으로 옆 셀까지 펼쳐집니다(동적 배열).
=XLOOKUP(F2, A:A, B:C, "사번없음")
F2가 'A103'이면 G2에는 '이서연', H2에는 '총무팀'이 한 수식으로 동시에 채워집니다. VLOOKUP이었다면 열마다 함수를 따로 두 번 써야 했던 작업입니다. 찾는 사번이 없으면 #N/A 대신 지정한 '사번없음'이 바로 표시됩니다.
일치모드 옵션표
| 값 | 동작 |
|---|---|
| 0 (기본값) | 정확히 일치하는 값만 찾음 |
| -1 | 정확히 일치하는 값이 없으면 그보다 작은 값 중 가장 가까운 값 |
| 1 | 정확히 일치하는 값이 없으면 그보다 큰 값 중 가장 가까운 값 |
| 2 | 와일드카드(*, ?) 패턴 일치 |
검색모드 옵션표
| 값 | 동작 |
|---|---|
| 1 (기본값) | 첫 항목부터 검색 |
| -1 | 마지막 항목부터 검색(가장 최근 값을 찾을 때 유용) |
| 2 / -2 | 이진 검색(정렬된 대용량 데이터에서 속도 향상) |
예를 들어 거래 이력 표에서 같은 거래처가 여러 번 나올 때 '가장 최근 거래 단가'를 찾고 싶다면 검색모드를 -1로 지정합니다.
=XLOOKUP(F2, A:A, C:C, "없음", 0, -1)
오류·주의사항
| 증상 | 원인 | 해결 |
|---|---|---|
| #NAME? | 엑셀 2019 이하 등 구버전에서 사용 | INDEX/MATCH로 대체하거나 Microsoft 365로 업그레이드 |
| #N/A | 네 번째 인수를 생략했고 찾을값이 없음 | 네 번째 인수에 기본값을 지정해 방지 |
| #SPILL! | 여러 열 반환 결과가 나올 자리에 값이 이미 있음 | 결과가 펼쳐질 오른쪽 셀들을 비워둠 |
새 문서를 처음부터 만든다면 VLOOKUP 대신 XLOOKUP을 기본으로 쓰는 것을 권장합니다. 다만 협업하는 동료나 고객이 구버전 엑셀을 쓸 가능성이 있다면 호환성을 먼저 확인하세요.
여러 조건을 동시에 만족하는 값 찾기
VLOOKUP·INDEX/MATCH는 조건이 2개 이상(예: 부서 + 이름이 동시에 일치하는 행)일 때 보조열을 따로 만들어야 하는 경우가 많습니다. XLOOKUP은 찾을범위 자리에 조건식을 곱해서 넣는 방식으로 별도 보조열 없이 다중 조건을 처리할 수 있습니다.
| A열(부서) | B열(이름) | C열(직급) |
|---|---|---|
| 영업1팀 | 김민수 | 대리 |
| 영업2팀 | 김민수 | 사원 |
| 총무팀 | 이서연 | 과장 |
이름만으로는 '김민수'가 두 명이라 구분이 안 됩니다. 부서(F2)와 이름(G2)이 모두 일치하는 행의 직급을 찾으려면 두 조건을 곱한 배열을 찾을범위로 지정합니다.
=XLOOKUP(1, (A2:A4=F2)*(B2:B4=G2), C2:C4, "일치없음")
(A2:A4=F2)와 (B2:B4=G2)는 각각 참(1)/거짓(0)의 배열을 만들고, 이 둘을 곱하면 두 조건을 모두 만족하는 행만 1이 됩니다. 첫 번째 인수를 '1'로 두어 '값이 1인 위치'를 찾도록 하는 것이 이 패턴의 핵심입니다.
실무에서 XLOOKUP으로 바꾸면 좋은 순간 체크리스트
- •VLOOKUP 수식에서 열을 추가·삭제할 때마다 열번호를 수정하고 있다면 → XLOOKUP
- •IFERROR(VLOOKUP(...), "")처럼 오류 처리 함수를 매번 덧씌우고 있다면 → XLOOKUP의 세 번째 인수로 대체
- •이름·부서·직급 등 여러 열을 각각 다른 셀에 반복해서 조회하고 있다면 → XLOOKUP 한 번으로 여러 열 동시 반환
- •가장 최근 값(마지막에 입력된 행)을 찾아야 한다면 → 검색모드 -1