오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
실무자 기초 강의

VLOOKUP 다중조건 검색

오빠두엑셀 by 오빠두엑셀
  • 학습시간 9분
  • 난이도 초급
  • 작성일 2019.11.04

여러개 조건을 만족하는 VLOOKUP, 이것보다 쉬울수 없다! - INDEX/MATCH

VLOOKUP 함수는 단일 조건 검색만 지원하므로 '품목 + 주문처'처럼 두 가지 이상의 조건을 동시에 만족하는 값을 찾기 어렵습니다. 이 강의에서는 INDEX/MATCH 함수와 배열 수식을 결합해 다중 조건 검색 공식을 만드는 원리를 단계별로 살펴봅니다. 공식의 동작 흐름과 #N/A 오류 해결 방법까지 함께 정리하므로, 실무 데이터 검색 작업에 바로 활용할 수 있습니다.

VLOOKUP 다중조건 검색
DOWNLOADS

실습자료를 준비했어요

수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇

사용된 공식
= { INDEX(출력범위, MATCH(1, (조건1=조건범위1)*(조건2=조건범위2)*..., 0)) }

[! 주의] 해당 공식은 배열수식이므로 Ctrl + Shift + Enter 키로 입력해야 합니다.
그렇지 않으면 #VALUE! 오류가 반환됩니다.

인수 설명

엑셀 vlookup 다중조건 인수 설명

인수 설명
출력범위 결과로 반환할 값이 입력된 범위입니다. 조건범위와 출력범위의 높이 또는 너비는 반드시 동일해야 합니다.
조건범위1 첫 번째 조건이 입력된 범위입니다.
조건1 첫 번째 조건값입니다.
조건범위2 두 번째 조건이 입력된 범위입니다.
조건2 두 번째 조건값입니다.
관련 강의

INDEX/MATCH 함수의 기본 동작원리가 궁금하다면 아래 영상강의를 먼저 확인해보세요.


공식에 대한 설명

INDEX 함수와 MATCH 함수를 응용한 공식으로, VLOOKUP 함수에서는 처리하기 어려운 '여러 조건을 동시에 만족하는 값 검색'을 구현합니다. INDEX/MATCH 공식의 기초 사용법은 관련 포스트에서 함께 확인하세요.

해당 공식은 각 조건범위가 모두 세로 방향이거나 모두 가로 방향일 때 사용합니다. 예를 들어 조건범위1은 가로 방향이고 조건범위2는 세로 방향처럼 두 범위의 방향이 서로 다를 경우에는 적용할 수 없습니다. 이런 경우에는 INDEX 함수의 세 번째 인수까지 활용하여 공식을 작성합니다. 자세한 내용은 INDEX/MATCH 함수의 고급 사용법을 정리한 관련 포스트를 참고합니다.

예제파일에 사용된 공식
= { INDEX($D$7:$D$18, MATCH(1, ($B$7:$B$18=H8)*($C$7:$C$18=H7), 0)) }
공식의 동작 원리
  1. 먼저 여러 조건범위에서 모든 조건을 동시에 만족하는 행의 위치를 찾습니다. 이때 MATCH 함수를 사용합니다.
    조건1 : $B$7:$B$18 = '품목'
    조건2 : $C$7:$C$18 = '주문처'
    MATCH 함수는 조건1과 조건2를 동시에 만족하는 행의 번호를 반환합니다.
  2. 이어서 MATCH 함수에 입력되는 두 배열의 곱셈 과정을 살펴봅니다.
    = {저지방우유, 하루우유, 하루우유, 저지방우유, 딸기맛우유, ...} '// B7:B18 범위에 입력된 품목 배열입니다.
    = {오빠두식당, 오빠두식당, 엑셀천국, 엑셀천국, 엑셀천국, ...} '// C7:C18 범위에 입력된 주문처 배열입니다.
    '// 검색 조건으로 '하루우유'와 '오빠두식당'을 사용하면, 두 배열의 곱셈은 다음과 같이 계산됩니다.
    = {품목범위=하루우유} * {주문처범위=오빠두식당}
    = {0, 1, 1, 0, 0, ..} * {1, 1, 0, 0, 0, ..}
    = {0, 1, 0, 0, 0, ..} '// 두 배열을 같은 위치끼리 곱한 결과입니다.
  3. 이렇게 계산된 두 배열의 곱셈 결과를 MATCH 함수의 검색 범위로 사용합니다.
    = MATCH(1, ('품목범위'='품목')*('주문처범위'='주문처'), 0)
    = MATCH(1, {0, 1, 0, 0, 0, ...}, 0)
    = 2 '// MATCH 함수는 배열에서 '1'의 위치를 찾습니다. 두 번째 항목이 '1'이므로 결과값 2를 반환합니다.
  4. 이제 INDEX 함수의 동작 원리를 살펴봅니다. INDEX 함수는 지정한 범위에서 '해당 순번'에 위치한 값을 반환합니다.
    = INDEX($D$7:$D$18, 2) '// MATCH 함수가 반환한 2가 INDEX 함수의 위치 인수로 입력됩니다.
    = INDEX({1200, 1350, 1340, 1300, ...}, 2)
    = 1350 '// 범위에서 두 번째에 위치한 1350이 결과로 반환됩니다.
  5. 지금까지의 동작 흐름을 정리하면 다음과 같습니다.
    첫째, 다중 조건('하루우유'와 '오빠두식당')이 동시에 일치하는 행은 출력범위 기준 2번째 행입니다. (MATCH 함수)
    둘째, 따라서 출력범위의 2번째에 위치한 값 1350이 최종 결과로 반환됩니다. (INDEX 함수)

[링크] MS 공식 홈페이지 — VLOOKUP 함수 사용법 상세 설명

댓글 102
4.9 (59개 평가)
오세창
오세창 2019.09.15 12:35
안녕하세요.
강의 잘보고, 잘듣고 있습니다.
감사합니다.
예제 파일 ppt 빼고 나머지 모두 다운로드가 안되네요.
오빠두엑셀
오빠두엑셀 2019.09.22 17:55
안녕하세요? 오빠두엑셀입니다.
첨부파일에 문제가 생겼었습니다 :) 확인 감사드려요.
문제 해결되었으니 다시 시도해주시겠어요? 감사합니다.
김진현
김진현 2019.12.27 02:56
안녕하세요. 강의 잘 보고 있습니다. 질문이 하나 있어서요..
예전에 동적범위 강의를 보고, 이번 공식에 적용하고 싶어서 출력범위에 offset함수로 동적범위를 적용했습니다.
그런데 어떤건 옳은값이 나오고 어떤건 #REF 에러가 나오는데요 ㅠ.ㅠ 왜 그러는지 알 수 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2019.12.27 18:17
안녕하세요? 오빠두엑셀입니다. ^_^
= { INDEX(출력범위, MATCH(1, (조건1=조건범위1)*(조건2=조건범위2)*…, 0)) }
공식에서 [출력범위]에 동적범위를 적용하셨다는 말씀이시지요?

출력범위말고도 각 [조건범위]에도 동적범위를 적용해보시겠어요?
출력범위는 늘어난반면 조건범위는 그대로일경우 MATCH 함수로 올지않은값이 반환되서 그럴수 있습니다.^_^
ㅇㅇㅇ
ㅇㅇㅇ 2020.01.22 15:46
감사합니다!
충
2020.02.19 22:26
감사합니다. 많이 배우고 있습니다. 오늘도 또 많이 배우고 갑니다.
우후대박
우후대박 2020.03.03 11:33
다중 조건 찾고 있었는데, 실마리가 보입니다. 아래 분처럼 동적범위 설정은 다음 스텝으로 진행해봐야겠습니다.
다만, 아이템 하나를 검색하는데 다중조건함수를 50개 이상 걸어 놓으니 속도 저하가 상당하네요.
품질 부서에 있다보니 아이템 하나에 측정해야할 치수가 50개 이상이라 어쩔수 없는것 같아요.
궁금한 점은 출력범위, 조건범위를 A:A 형태가 나은지, 동적 범위를 설정하는게 나은지.. 속도 측면에서 어떤게 유리한가요?
오빠두엑셀
오빠두엑셀 작성자 2020.03.03 19:54
안녕하세요!^^
맞습니다. 해당 공식은 '배열수식'이므로, 보통 1만행이상 데이터에 적용시에는 상당한 속도저하가 발생합니다.
대안책으로 값1&값2&값3.. 을 연결하여 별도의 열에 출력한뒤, 값1&값2&값3을 vlookup 함수로 검색하는 방법도 고려하실 수 있습니다 ^^

배열수식을 사용할경우, 전체열(A:A) 대신 동적범위로 사용하시는게 속도측면에서 유리합니다.

제 답변이 도움이 되셨길 바랍니다 ^^
감사합니다!
조인환
조인환 2020.03.04 10:38
추가 작업을 망설이고 있었는데, 눈앞이 환해지는것 같습니다. 감사합니다 ^^
사랑하는님
사랑하는님 2020.03.04 16:15
2개의 행과 여러개의 열에 한건의 데이타를
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 공사명 공사번호 착공일 준공일 감독자 감리자 총공사비 정산금액
오빠두엑셀
오빠두엑셀 작성자 2020.03.05 20:52
안녕하세요~^^ 위 같은 상황은 INDEX/MATCH 함수나 VLOOKUP 함수를 사용하기 전에, 우선 데이터를 불러오기 알맞은 형태로 가공해줘야 합니다.

다른 F1셀과 F2셀에 각각 아래 두 공식을 입력한 뒤 아래로 자동채우기 해 보시겠어요?^^
=INDIRECT("A"&ROW()) | =INDIRECT("A"&ROW()*2)

그럼 한줄로 데이터가 불러와집니다 ^^
위 공식을 적절히 응용하셔서 데이터를 정규화하신 뒤, INDEX MATCH 함수를 적용해보시면 될듯합니다.

제 답변이 도움이 되셨길 바랍니다.
감사합니다.
사랑하는님
사랑하는님 2020.03.06 11:08
댓글 추가하기...
너무 감사합니다.
위 공식을 응용하니 쉽게 빠르게 되네요!
초코
초코 2020.03.04 22:07
감사합니다 잘보겠습니다
김기태
김기태 2020.03.18 10:07
다중서식 왜 안되나 끙끙 앓다가, 이 서식 보고 문제를 해결하여 암이 나았습니다
호야
호야 2020.03.18 15:48
잘보고 갑니다요
엑마
엑마 2020.03.19 13:23
덕분에 엄청나게 많은 엑셀작업을 효율화할 수 있게 되었습니다!
이번에 배운것을 적용 중 궁금한 점이 있어 질문남깁니다!!
배열 곱하는 부분에서 $D$2:$D$10="2017-01-01"이런식으로 남기면
날짜를 읽지 못하더라구요!! 그런데 일반서식입히면 나타나는 넘버 43647을 입력하면, 또 되구요

만약에 모든 함수에서 "2019-01-01"같은 날짜를 인식하지 못하는 것이면 이해가 가겠지만, COUNTIF같은 다른함수에서는 다 가능하더라구요.. 그런데 왜 배열곱붑분에서만 날짜를 인식하지 못하는 것인지 궁금합니다 ㅜ
항상 감사드립니다.
오빠두엑셀
오빠두엑셀 작성자 2020.03.21 15:59
안녕하세요!^^
D2:D10="2017-01-01" 문제 해결법

"2017-01-01"은 텍스트입니다. 따라서, D2:D10=DATE(2017,1,1)로 입력하시면 잘 동작하게 됩니다.
배열 vs 범위를 조건으로 받아오는 함수

IF함수나 SUMPRODUCT 함수, MATCH 함수는 조건으로 '배열' (=논리식)을 받아옵니다.
반면 COUNTIF, SUMIF 함수는 조건으로 '범위'를 받아옵니다. (예: COUNTIF(조건범위,조건))
즉 COUNTIF 함수의 조건으로 "2017-01-01"를 입력하면, 기존값은 텍스트가 맞으나 함수 자체적으로 '날짜형식의 텍스트'는 날짜로 처리하므로 "2017-01-01"로 입력해도 잘 동작하게 됩니다.
배열을 조건으로 받아올 경우의 장점

조건으로 배열을 받아올 경우, 조건안에 다른 함수를 적용할 수 있는 장점이 있습니다.
예를들어, MONTH(D2:D10)=1 을 조건으로 넣으면 1월달인 값만 확인할 수가 있습니다.
하지만 SUMIF함수나 COUNTIF 함수는 조건으로 범위가 들어가므로, 조건범위안에 다른 함수를 동시에 사용할 수 없는 단점이 있습니다.
제 답변이 도움이 되셨길 바랍니다.
감사합니다.^^