
VLOOKUP 다중 조건 고급 응용 — 중복 제거, OR 조건, 부분일치까지
VLOOKUP 다중 조건은 이미 한 번 다뤘지만, 실무에서는 기초편만으로 해결되지 않는 상황이 많이 등장합니다. 이 글에서는 VLOOKUP 다중 조건 고급 패턴을 중심으로, 중복 제거·OR 조건·부분일치까지 단계별로 정리합니다.
엑셀 365를 사용한다면 UNIQUE/FILTER처럼 동적 배열 함수와 함께 설계하는 방법도 함께 익혀 두면, 나중에 파일 구조를 갈아엎을 일을 크게 줄일 수 있습니다.
기초 개념(헬퍼열, CHOOSE, INDEX + MATCH)만 정리된 글은 VLOOKUP 다중 조건 검색 방법(기초편)에서 먼저 확인하실 수 있습니다.
빠른 해결(Quick Fix) — 지금 당장 쓸 수 있는 고급 VLOOKUP 다중 조건 수식 3개
패턴 A: COUNTIFS + 헬퍼열로 “첫 번째 일치값만” VLOOKUP
상황
- A열: 주문번호
- B열: 고객코드
- C열: 제품코드
- D열: 주문일
- E열: 매출액
목표: 고객코드 + 제품코드 조합이 여러 번 나와도 첫 번째 주문 행의 매출액만 가져오기
-
E2에 조합키:=B2&"|"&C2 -
F2에 “첫 번째 행만 키 유지”:=IF(COUNTIFS($B$2:B2,B2,$C$2:C2,C2)>1,"",E2) -
고객코드(
H2), 제품코드(I2)를 입력하고, 결과 셀에:=VLOOKUP(H2&"|"&I2,$F$2:$G$1000,2,FALSE)
COUNTIFS로 첫 번째 행만 남겨 두고, 나머지 중복 행의 키를 비워서 VLOOKUP이 볼 수 없게 만드는 패턴입니다.
패턴 B: CHOOSE로 헬퍼열 없이 다중 조건 VLOOKUP
헬퍼열을 추가할 수 없을 때는 CHOOSE로 “가상 테이블”을 만들 수 있습니다.
=VLOOKUP(
H2&"|"&I2,
CHOOSE({1,2}, $B$2:$B$1000&"|"&$C$2:$C$1000, $D$2:$D$1000),
2,
FALSE
)
실제 시트에는 헬퍼열이 없지만, CHOOSE가 “조합키”와 “반환값” 두 열짜리 가상 테이블을 만들어 주기 때문에 VLOOKUP이 그대로 동작합니다.
패턴 C: UNIQUE/FILTER로 다중 조건 결과를 한 번에 뽑기 (365/동적 배열)
동일 조합이 여러 행 있고, 그 조합별로 1행만 남기고 싶다면:
=UNIQUE(B2:D1000)
특정 고객·제품에 해당하는 행 전체를 필터링하고 싶다면:
=FILTER(
B2:E1000,
(B2:B1000=H2) * (C2:C1000=I2),
"해당 없음"
)
이렇게 필터링된 결과를 다시 VLOOKUP/INDEX MATCH/XLOOKUP으로 가공하면, “다중 조건 → 행 전체 → 특정 열만 추출”이라는 흔한 패턴을 깔끔하게 만들 수 있습니다.
왜 또 다른 글이 필요한가? — “VLOOKUP 다중 조건 고급” 범위 정의
기초편에서는 헬퍼열, CHOOSE, INDEX MATCH를 이용한 다중 조건 조회까지만 다뤘습니다. 이번 글에서는 다음 내용을 추가로 다룹니다.
- COUNTIFS + VLOOKUP 조합으로 “첫 번째 일치만 가져오기”
- 헬퍼열 없이 CHOOSE/INDEX MATCH로 다중 조건 처리
- UNIQUE/FILTER와의 역할 분담
- 대용량에서 VLOOKUP 다중 조건을 쓰지 말아야 하는 상황
패턴 1 — COUNTIFS + VLOOKUP으로 중복 제거 & 첫 번째 행만 가져오기
① 샘플 데이터 구조 만들기
아래와 같은 매출 데이터가 있다고 가정합니다.
| 행 | A:주문번호 | B:고객코드 | C:제품코드 | D:주문일 | E:매출액 |
|---|---|---|---|---|---|
| 2 | O-1001 | C001 | P01 | 2025-01-01 | 50,000 |
| 3 | O-1002 | C001 | P01 | 2025-01-05 | 55,000 |
| 4 | O-1003 | C001 | P02 | 2025-01-03 | 70,000 |
| 5 | O-1004 | C002 | P01 | 2025-01-02 | 60,000 |
| 6 | O-1005 | C002 | P01 | 2025-01-10 | 65,000 |
② COUNTIFS로 각 조합의 첫 번째 행만 표시하는 헬퍼열
-
F2에 조합키:=B2&"|"&C2 -
G2에 “첫 번째 행만 키 유지”:=IF(COUNTIFS($B$2:B2,B2,$C$2:C2,C2)>1,"",F2) -
아래와 같이 첫 번째 행만 키가 남습니다.
행 B:고객 C:제품 F:조합키 G:첫 번째만 키 2 C001 P01 C001|P01 C001|P01 3 C001 P01 C001|P01 4 C001 P02 C001|P02 C001|P02 5 C002 P01 C002|P01 C002|P01 6 C002 P01 C002|P01
③ VLOOKUP으로 “첫 번째 행”만 검색하는 공식
고객코드(I2), 제품코드(J2)를 입력해 두고, 결과 셀에 다음 수식을 입력합니다.
=VLOOKUP(I2&"|"&J2,$G$2:$H$1000,2,FALSE)
G열에는 “첫 번째 행만 키가 남은 열”, H열에는 매출액(또는 원하는 반환 열)을 두면, 항상 첫 번째 주문 행만 찾게 됩니다.
④ 조건이 3개 이상일 때 확장 패턴
조건이 3개(예: 고객 + 제품 + 색상) 이상이어도 원리는 같습니다.
=IF(
COUNTIFS($B$2:B2,B2,$C$2:C2,C2,$D$2:D2,D2)>1,
"",
B2&"|"&C2&"|"&D2
)
조회 수식은 다음과 같이 확장할 수 있습니다.
=VLOOKUP(I2&"|"&J2&"|"&K2,$G$2:$H$1000,2,FALSE)
패턴 2 — 헬퍼열 없이 CHOOSE/INDEX MATCH로 다중 조건 + 부분일치
① CHOOSE로 가상 테이블 만들기
헬퍼열을 추가할 수 없다면 CHOOSE로 가상 테이블을 만들어 VLOOKUP을 사용할 수 있습니다.
=VLOOKUP(
H2&"|"&I2&"|"&J2,
CHOOSE(
{1,2},
$B$2:$B$1000&"|"&$C$2:$C$1000&"|"&$D$2:$D$1000,
$E$2:$E$1000
),
2,
FALSE
)
② INDEX MATCH로 좌측 열 + 다중 조건 처리
같은 구조를 INDEX MATCH로 바꾸면 왼쪽 열 조회와 열 삽입에 더 강해집니다.
=INDEX(
$E$2:$E$1000,
MATCH(
H2&"|"&I2&"|"&J2,
$B$2:$B$1000&"|"&$C$2:$C$1000&"|"&$D$2:$D$1000,
0
)
)
INDEX MATCH 패턴은 별도 글인 VLOOKUP, XLOOKUP 한계를 넘는 INDEX MATCH function 완전 정복에서 더 다양한 예제로 정리해 두었습니다.
③ 부분일치(와일드카드) 조건 섞을 때 주의점
부분일치 조건은 대표 열 하나에만 쓰는 것이 안전합니다.
=INDEX(
$E$2:$E$1000,
MATCH(
"*"&H2&"*"&"|"&I2&"|"&J2,
$B$2:$B$1000&"|"&$C$2:$C$1000&"|"&$D$2:$D$1000,
0
)
)
이 예에서는 상품명에 H2 값이 포함되는 행 중에서, 색상과 사이즈가 정확히 일치하는 행을 찾습니다.
패턴 3 — 동적 배열 버전: UNIQUE/FILTER와 역할 분담하기
① UNIQUE로 “조건 조합별 1행만 남기기”
동일 조합이 여러 번 등장하는 데이터를 간단히 정리하려면 UNIQUE가 편리합니다.
=UNIQUE(B2:D1000)
또는 조합키 배열을 만들어서 UNIQUE를 쓰면, 고객+제품 조합별로 1개만 남길 수도 있습니다.
② FILTER로 다중 조건 행 전체 가져오기
좋은 패턴은 “조건을 FILTER로 먼저 좁히고, 필요한 열만 다시 조회”하는 방식입니다.
=FILTER(
B2:E1000,
(B2:B1000=H2) * (C2:C1000=I2),
"해당 없음"
)
③ VLOOKUP 대신 XLOOKUP/INDEX MATCH로 마무리
동적 배열과 함께 쓸 때는 XLOOKUP/INDEX MATCH가 더 자연스러운 경우도 많습니다. XLOOKUP 다중 조건 관련 내용은 XLOOKUP 다중 조건 완벽 가이드, VLOOKUP과 비교는 VLOOKUP vs XLOOKUP 완전 가이드에서 자세히 다룹니다.
언제 VLOOKUP 다중 조건을 쓰지 말아야 할까? — SUMPRODUCT·피벗으로 보내야 할 케이스
다중 조건이 들어간다고 해서 항상 VLOOKUP이 정답은 아닙니다.
- “단가”를 가져오는 등 단일 값을 찾는 경우 → VLOOKUP/XLOOKUP/INDEX MATCH
- “합계/개수/평균” 등 집계가 목적일 때 → SUMIFS/SUMPRODUCT/피벗 테이블
복잡한 집계를 VLOOKUP 다중 조건으로 억지로 만들고 있다면, 아래 글들로 설계를 바꾸는 것을 추천합니다.
Troubleshooting — 자주 틀리는 증상·원인·해결법
| 증상 | 원인 | 해결법 |
|---|---|---|
| COUNTIFS + VLOOKUP 패턴에서 항상 두 번째 행이 잡힘 | COUNTIFS 범위가 현재 행까지가 아니라 전체 범위로 고정됨 | COUNTIFS의 첫 번째 주소는 절대참조, 두 번째 주소는 상대참조로 설정해 “현재 행까지”만 집계 |
| 헬퍼열이 모두 같은 값으로 보이고 중복 제거가 되지 않음 | 조합키를 구분자 없이 단순 연결해 값이 뒤섞임 | "|"처럼 눈에 보이는 구분자를 넣고, 숫자/텍스트 형식을 통일 |
| CHOOSE 패턴에서 #VALUE! 오류 발생 | CHOOSE에 전달한 배열들의 크기가 서로 다름 | 모든 범위가 같은 행 수를 가지는지 다시 확인 |
| INDEX MATCH 다중 조건 수식이 #N/A만 반환 | MATCH의 일치 유형 인수를 생략하거나 1/-1로 사용 | 다중 조건에서는 반드시 0(정확 일치)을 사용 |
| UNIQUE/FILTER 사용 시 예전 버전에서 #NAME? 오류 | 동적 배열·새 함수 미지원 버전 | 피벗 테이블이나 VLOOKUP/SUMIFS 등의 고전 함수로 동일 논리를 재구성 |
| VLOOKUP 다중 조건 수식이 느려서 파일이 자주 멈춤 | 전체 열(B:B 등) 참조 또는 지나치게 넓은 범위 사용 | 정확한 사용 범위만 지정하고, 필요하면 표/구조화 참조로 관리 |
| #N/A가 자주 뜨고 이유를 찾기 어려움 | 공백·형식(텍스트 vs 숫자)·정렬 상태 등 기본 문제 | VLOOKUP #N/A 오류 완벽 가이드 참고 |
마무리 & 다음에 보면 좋은 글 3개
이번 글에서는 VLOOKUP 다중 조건 고급 관점에서 COUNTIFS, CHOOSE, INDEX MATCH, UNIQUE/FILTER를 조합하는 세 가지 패턴을 정리했습니다.
함께 보면 좋은 글:
- VLOOKUP 다중 조건 검색 방법 (기초편)
- VLOOKUP, XLOOKUP 한계를 넘는 INDEX MATCH function 완전 정복
- 엑셀 SUMPRODUCT 함수 완벽 가이드: 가중합·다중조건·조건부 개수
엑셀점프를 북마크해 두시면, 이후 XLOOKUP 고급 응용과 SUMPRODUCT 다중 조건 응용 글도 바로 확인하실 수 있습니다.