VLOOKUP 다중조건 검색
여러개 조건을 만족하는 VLOOKUP, 이것보다 쉬울수 없다! - INDEX/MATCH
VLOOKUP 함수는 단일 조건 검색만 지원하므로 '품목 + 주문처'처럼 두 가지 이상의 조건을 동시에 만족하는 값을 찾기 어렵습니다. 이 강의에서는 INDEX/MATCH 함수와 배열 수식을 결합해 다중 조건 검색 공식을 만드는 원리를 단계별로 살펴봅니다. 공식의 동작 흐름과 #N/A 오류 해결 방법까지 함께 정리하므로, 실무 데이터 검색 작업에 바로 활용할 수 있습니다.
실습자료를 준비했어요
수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇
사용된 공식
[! 주의] 해당 공식은 배열수식이므로 Ctrl + Shift + Enter 키로 입력해야 합니다.
그렇지 않으면 #VALUE! 오류가 반환됩니다.
인수 설명

| 인수 | 설명 |
| 출력범위 | 결과로 반환할 값이 입력된 범위입니다. 조건범위와 출력범위의 높이 또는 너비는 반드시 동일해야 합니다. |
| 조건범위1 | 첫 번째 조건이 입력된 범위입니다. |
| 조건1 | 첫 번째 조건값입니다. |
| 조건범위2 | 두 번째 조건이 입력된 범위입니다. |
| 조건2 | 두 번째 조건값입니다. |
관련 강의
INDEX/MATCH 함수의 기본 동작원리가 궁금하다면 아래 영상강의를 먼저 확인해보세요.
공식에 대한 설명
INDEX 함수와 MATCH 함수를 응용한 공식으로, VLOOKUP 함수에서는 처리하기 어려운 '여러 조건을 동시에 만족하는 값 검색'을 구현합니다. INDEX/MATCH 공식의 기초 사용법은 관련 포스트에서 함께 확인하세요.
해당 공식은 각 조건범위가 모두 세로 방향이거나 모두 가로 방향일 때 사용합니다. 예를 들어 조건범위1은 가로 방향이고 조건범위2는 세로 방향처럼 두 범위의 방향이 서로 다를 경우에는 적용할 수 없습니다. 이런 경우에는 INDEX 함수의 세 번째 인수까지 활용하여 공식을 작성합니다. 자세한 내용은 INDEX/MATCH 함수의 고급 사용법을 정리한 관련 포스트를 참고합니다.
예제파일에 사용된 공식
공식의 동작 원리
- 먼저 여러 조건범위에서 모든 조건을 동시에 만족하는 행의 위치를 찾습니다. 이때 MATCH 함수를 사용합니다.
조건1 : $B$7:$B$18 = '품목'
조건2 : $C$7:$C$18 = '주문처'
MATCH 함수는 조건1과 조건2를 동시에 만족하는 행의 번호를 반환합니다. - 이어서 MATCH 함수에 입력되는 두 배열의 곱셈 과정을 살펴봅니다.
= {저지방우유, 하루우유, 하루우유, 저지방우유, 딸기맛우유, ...} '// B7:B18 범위에 입력된 품목 배열입니다.
= {오빠두식당, 오빠두식당, 엑셀천국, 엑셀천국, 엑셀천국, ...} '// C7:C18 범위에 입력된 주문처 배열입니다.'// 검색 조건으로 '하루우유'와 '오빠두식당'을 사용하면, 두 배열의 곱셈은 다음과 같이 계산됩니다.
= {품목범위=하루우유} * {주문처범위=오빠두식당}
= {0, 1, 1, 0, 0, ..} * {1, 1, 0, 0, 0, ..}
= {0, 1, 0, 0, 0, ..} '// 두 배열을 같은 위치끼리 곱한 결과입니다. - 이렇게 계산된 두 배열의 곱셈 결과를 MATCH 함수의 검색 범위로 사용합니다.
= MATCH(1, ('품목범위'='품목')*('주문처범위'='주문처'), 0)
= MATCH(1, {0, 1, 0, 0, 0, ...}, 0)
= 2 '// MATCH 함수는 배열에서 '1'의 위치를 찾습니다. 두 번째 항목이 '1'이므로 결과값 2를 반환합니다. - 이제 INDEX 함수의 동작 원리를 살펴봅니다. INDEX 함수는 지정한 범위에서 '해당 순번'에 위치한 값을 반환합니다.
= INDEX($D$7:$D$18, 2) '// MATCH 함수가 반환한 2가 INDEX 함수의 위치 인수로 입력됩니다.
= INDEX({1200, 1350, 1340, 1300, ...}, 2)
= 1350 '// 범위에서 두 번째에 위치한 1350이 결과로 반환됩니다. - 지금까지의 동작 흐름을 정리하면 다음과 같습니다.
첫째, 다중 조건('하루우유'와 '오빠두식당')이 동시에 일치하는 행은 출력범위 기준 2번째 행입니다. (MATCH 함수)
둘째, 따라서 출력범위의 2번째에 위치한 값 1350이 최종 결과로 반환됩니다. (INDEX 함수)
강의 잘보고, 잘듣고 있습니다.
감사합니다.
예제 파일 ppt 빼고 나머지 모두 다운로드가 안되네요.
첨부파일에 문제가 생겼었습니다 :) 확인 감사드려요.
문제 해결되었으니 다시 시도해주시겠어요? 감사합니다.
예전에 동적범위 강의를 보고, 이번 공식에 적용하고 싶어서 출력범위에 offset함수로 동적범위를 적용했습니다.
그런데 어떤건 옳은값이 나오고 어떤건 #REF 에러가 나오는데요 ㅠ.ㅠ 왜 그러는지 알 수 있을까요?
= { INDEX(출력범위, MATCH(1, (조건1=조건범위1)*(조건2=조건범위2)*…, 0)) }
공식에서 [출력범위]에 동적범위를 적용하셨다는 말씀이시지요?
출력범위말고도 각 [조건범위]에도 동적범위를 적용해보시겠어요?
출력범위는 늘어난반면 조건범위는 그대로일경우 MATCH 함수로 올지않은값이 반환되서 그럴수 있습니다.^_^
다만, 아이템 하나를 검색하는데 다중조건함수를 50개 이상 걸어 놓으니 속도 저하가 상당하네요.
품질 부서에 있다보니 아이템 하나에 측정해야할 치수가 50개 이상이라 어쩔수 없는것 같아요.
궁금한 점은 출력범위, 조건범위를 A:A 형태가 나은지, 동적 범위를 설정하는게 나은지.. 속도 측면에서 어떤게 유리한가요?
맞습니다. 해당 공식은 '배열수식'이므로, 보통 1만행이상 데이터에 적용시에는 상당한 속도저하가 발생합니다.
대안책으로 값1&값2&값3.. 을 연결하여 별도의 열에 출력한뒤, 값1&값2&값3을 vlookup 함수로 검색하는 방법도 고려하실 수 있습니다 ^^
배열수식을 사용할경우, 전체열(A:A) 대신 동적범위로 사용하시는게 속도측면에서 유리합니다.
제 답변이 도움이 되셨길 바랍니다 ^^
감사합니다!
1개의 행과 열에 데이타를 가져오기를 한는데
어떤 함수조합을 사용해야하나요
A B C D E
1 순번 공사명 착공일 감독자 총공사비
2 공사번호 준공일 감리자 정산금액
3 1 OO공사 2019-05-20 홍길동 100,000,000
4 가20-01 2020-01-31 김갑동 95,000,000
5 2 AA공사 ............. ........ .................
6 가20-02 .............. ....... .................
A B C D E F G H
1 공사명 공사번호 착공일 준공일 감독자 감리자 총공사비 정산금액
다른 F1셀과 F2셀에 각각 아래 두 공식을 입력한 뒤 아래로 자동채우기 해 보시겠어요?^^
=INDIRECT("A"&ROW()) | =INDIRECT("A"&ROW()*2)
그럼 한줄로 데이터가 불러와집니다 ^^
위 공식을 적절히 응용하셔서 데이터를 정규화하신 뒤, INDEX MATCH 함수를 적용해보시면 될듯합니다.
제 답변이 도움이 되셨길 바랍니다.
감사합니다.
너무 감사합니다.
위 공식을 응용하니 쉽게 빠르게 되네요!
이번에 배운것을 적용 중 궁금한 점이 있어 질문남깁니다!!
배열 곱하는 부분에서 $D$2:$D$10="2017-01-01"이런식으로 남기면
날짜를 읽지 못하더라구요!! 그런데 일반서식입히면 나타나는 넘버 43647을 입력하면, 또 되구요
만약에 모든 함수에서 "2019-01-01"같은 날짜를 인식하지 못하는 것이면 이해가 가겠지만, COUNTIF같은 다른함수에서는 다 가능하더라구요.. 그런데 왜 배열곱붑분에서만 날짜를 인식하지 못하는 것인지 궁금합니다 ㅜ
항상 감사드립니다.
"2017-01-01"은 텍스트입니다. 따라서, D2:D10=DATE(2017,1,1)로 입력하시면 잘 동작하게 됩니다.
IF함수나 SUMPRODUCT 함수, MATCH 함수는 조건으로 '배열' (=논리식)을 받아옵니다.
반면 COUNTIF, SUMIF 함수는 조건으로 '범위'를 받아옵니다. (예: COUNTIF(조건범위,조건))
즉 COUNTIF 함수의 조건으로 "2017-01-01"를 입력하면, 기존값은 텍스트가 맞으나 함수 자체적으로 '날짜형식의 텍스트'는 날짜로 처리하므로 "2017-01-01"로 입력해도 잘 동작하게 됩니다.
조건으로 배열을 받아올 경우, 조건안에 다른 함수를 적용할 수 있는 장점이 있습니다.
예를들어, MONTH(D2:D10)=1 을 조건으로 넣으면 1월달인 값만 확인할 수가 있습니다.
하지만 SUMIF함수나 COUNTIF 함수는 조건으로 범위가 들어가므로, 조건범위안에 다른 함수를 동시에 사용할 수 없는 단점이 있습니다.
제 답변이 도움이 되셨길 바랍니다.
감사합니다.^^