
VLOOKUP 다중 조건 다중 결과: 실무 공식 5가지로 “첫 값만 나오는 문제” 끝내기
엑셀에서 VLOOKUP은 가장 많이 쓰이지만, 실무에서 가장 자주 막히는 포인트도 확실합니다. 바로 (1) 다중 조건이거나 (2) 다중 결과(여러 행)일 때입니다. 이 글은 재현 가능한 예제 데이터와 템플릿 공식, 오류 방지 장치까지 한 번에 정리합니다.
Quick Fix — 10분 안에 “다중 조건 + 다중 결과” 끝내기
- 다중 조건인데 결과는 1개만 필요: 보조열(헬퍼열)로 키 합치고 VLOOKUP
- 다중 조건인데 결과가 여러 행(목록)으로 필요: 가능하면 FILTER로 스필(spill)
- 엑셀 2016/2019(FILTER 없음): INDEX+SMALL로 n번째 결과를 아래로 복사
VLOOKUP이 다중 조건/다중 결과에 약한 이유(원리)
VLOOKUP은 lookup_value 1개 값으로 table_array의 첫 번째 열에서 찾고, 매칭된 행 1개를 반환합니다. 그래서 조건이 여러 개면 “키를 합쳐 1개 값”으로 만들어야 하고, 결과가 여러 행이면 VLOOKUP 대신 FILTER 또는 INDEX+SMALL 설계가 필요합니다.
실무 예제 데이터(그대로 붙여넣기) + 표 구조 세팅
예제 데이터 (시트: Data)
OrderID Branch Product Customer OrderDate Qty UnitPrice SalesRep
1001 Seoul A001 Joel 2025-12-01 3 12000 Min
1002 Seoul A001 Joel 2025-12-02 2 12000 Min
1003 Seoul B002 Amy 2025-12-02 1 8000 Soo
1004 Busan A001 Joel 2025-12-03 5 9500 Jin
1005 Busan B002 Amy 2025-12-04 2 7800 Jin
1006 Busan B002 Joel 2025-12-05 1 7800 Min
1007 Seoul A001 Amy 2025-12-06 4 12000 Soo
1008 Seoul B002 Joel 2025-12-06 2 8000 Min
범위를 선택한 뒤 Ctrl+T로 테이블로 변환하세요(머리글 포함 체크). 테이블 이름은 tblOrder로 설정하면 이후 공식이 깔끔해집니다.
방법 1) 다중 조건(단일 결과): 헬퍼열(보조열)로 키 합치기
Data 테이블에 Key 열을 추가하고 아래 공식을 입력합니다.
=[@Branch] & "|" & [@Product]
Query 시트에서 단가를 조회(정확히 일치)합니다.
=IFERROR(
VLOOKUP($A2 & "|" & $B2, tblOrder[[Key]:[UnitPrice]], 2, 0),
""
)
방법 2) 다중 조건(단일 결과): CHOOSE로 “가상 테이블” 만들기
=IFERROR(
VLOOKUP(
$A2 & "|" & $B2,
CHOOSE({1,2}, tblOrder[Branch] & "|" & tblOrder[Product], tblOrder[UnitPrice]),
2,
0
),
""
)
방법 3) 다중 결과(여러 행): FILTER로 “목록” 한 방에 뽑기 (추천)
=FILTER(
tblOrder[[OrderID]:[UnitPrice]],
(tblOrder[Branch]=$A2) * (tblOrder[Product]=$B2),
"조건에 맞는 행 없음"
)
방법 4) 구버전(2016/2019): INDEX+SMALL로 n번째 결과 뽑기(배열수식)
아래 공식 입력 후, 구버전은 Ctrl+Shift+Enter로 확정하세요. 그리고 아래로 복사하면 2번째, 3번째 결과가 나옵니다.
=IFERROR(
INDEX(tblOrder[OrderID],
SMALL(
IF( (tblOrder[Branch]=$A2)*(tblOrder[Product]=$B2),
ROW(tblOrder[OrderID]) - MIN(ROW(tblOrder[OrderID])) + 1
),
ROWS($D$2:D2)
)
),
""
)
안전장치: 중복 키 검증(COUNTIFS), #N/A 처리(IFERROR), 날짜/공백 정리
중복 키 검증(유일성 체크)
=IF(
COUNTIFS(tblOrder[Branch],$A2, tblOrder[Product],$B2)=1,
VLOOKUP($A2&"|"&$B2, tblOrder[[Key]:[UnitPrice]], 2, 0),
"중복/미존재 확인"
)
키에 날짜가 들어가면 TEXT로 포맷 통일
=[@Branch] & "|" & [@Product] & "|" & TEXT([@OrderDate],"yyyymmdd")
Troubleshooting
| 증상 | 원인 | 해결 |
|---|---|---|
| #N/A | 정확일치 미설정/공백/타입 불일치 | 4번째 인수 0, TRIM/CLEAN, 날짜 TEXT 통일 |
| 항상 첫 값만 반환 | 다중 결과에 VLOOKUP 사용 | FILTER 또는 INDEX+SMALL |
| 열 삽입 후 값 틀어짐 | col_index_num 고정 | MATCH로 열번호 자동화 또는 XLOOKUP/INDEX+MATCH |
| CHOOSE가 일부 PC에서 실패 | 구버전/배열 지원 차이 | 보조열 방식 또는 CSE 적용 |
| 너무 느림 | 큰 배열/전체열 참조 | 테이블/필요 범위만, 보조열로 단순화 |
관련 글(내부 링크)
- VLOOKUP 다중 조건 공식(보조열/CHOOSE/TEXT)
- VLOOKUP 조합(MATCH·TEXT·IFERROR·COUNTIFS) 총정리
- INDEX MATCH로 깨지지 않는 조회식 만들기
- XLOOKUP vs VLOOKUP 비교(다중열 반환 포함)
- IFS 업그레이드(SWITCH/XLOOKUP/LET/LAMBDA)