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

VLOOKUP 함수 여러개 값 출력 공식

지원 버전 자세히 보기
엑셀 2013 이전엑셀 2016엑셀 2019엑셀 2021엑셀 2024M365웹 엑셀

조건에 맞는 여러 결과를 세로 또는 가로로 출력합니다.

VLOOKUP 함수 여러개 값 출력 공식 예제 미리보기
예제 미리보기 크게 보기

인수 설명

01결과를 세로로 불러오기

=INDEX ( 출력범위, SMALL ( IF ( 찾을값 = 찾을범위, MATCH ( ROW(찾을범위), ROW(찾을범위) ), "" ), ROWS($A$1:A1) ) )
인수 설명 자세히 보기(인수를 클릭하면 해당 영역만 강조됩니다. 여러 개를 함께 켜고 끌 수 있습니다.)
인수구분설명
출력범위필수출력할 값이 나열된 범위입니다.
찾을값필수찾을범위에서 찾을 값입니다.
찾을범위필수찾을값을 조회할 범위입니다.
F2=INDEX($B$2:$B$9,SMALL(IF($D$2=$A$2:$A$9,MATCH(ROW($A$2:$A$9),ROW($A$2:$A$9)),""),ROWS($A$1:A1)))
A
B
C
D
E
F
G
1
지역
이름
찾을지역
결과값 [세로]
2
서울
박지훈
서울
박지훈
3
경기
김진아
박시형
4
서울
박시형
황석훈
5
경기
유매력
6
서울
황석훈
7
인천
박나연
8
인천
하태정
9
부산
박남기
10
지역이 '서울'인 사람이 셋이라 이름 세 개가 아래로 차례로 채워집니다. 배열수식이므로 Ctrl+Shift+Enter 로 입력한 뒤 아래로 채웁니다.

02결과를 가로로 불러오기

=INDEX ( 출력범위, SMALL ( IF ( 찾을값 = 찾을범위, MATCH ( ROW(찾을범위), ROW(찾을범위) ), "" ), COLUMNS($A$1:A1) ) )
인수 설명 자세히 보기
인수구분설명
출력범위필수출력할 값이 나열된 범위입니다.
찾을값필수찾을범위에서 찾을 값입니다.
찾을범위필수찾을값을 조회할 범위입니다.
H2=INDEX($B$2:$B$9,SMALL(IF($D$2=$A$2:$A$9,MATCH(ROW($A$2:$A$9),ROW($A$2:$A$9)),""),COLUMNS($A$1:A1)))
A
B
C
D
E
F
G
H
I
J
K
1
지역
이름
찾을지역
결과값 [가로]
2
서울
박지훈
서울
박지훈
박시형
황석훈
3
경기
김진아
4
서울
박시형
5
경기
유매력
6
서울
황석훈
7
인천
박나연
8
인천
하태정
9
부산
박남기
10
ROWS 자리에 COLUMNS 를 넣으면 오른쪽으로 채울 때마다 1, 2, 3 으로 커집니다. 나머지는 세로 공식과 같습니다.

동작 원리

조건을 만족하는 행의 순번만 남긴 배열을 만든 다음, 그 순번을 하나씩 꺼내 INDEX 함수로 값을 가져옵니다.

예제 시트에서 지역이 '서울'인 이름을 세로로 출력하는 F2 셀의 계산 과정입니다. 단계마다 강조된 부분이 어떻게 계산되는지 살펴보세요.

1

조건을 만족하는 자리를 참·거짓으로 표시합니다

찾을값 하나를 찾을범위 전체와 비교하면 셀마다 참·거짓이 담긴 배열이 나옵니다.

= "서울" = { "서울", "경기", "서울", "경기", "서울", "인천", "인천", "부산" }
= { TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE } 지역이 서울인 자리만 TRUE 가 됩니다.
2

행마다 1부터 세는 순번을 만듭니다

ROW 함수는 실제 행 번호를 돌려주므로 2부터 시작합니다. MATCH 함수로 그 행 번호가 몇 번째인지 다시 세어 1부터 시작하는 순번으로 바꿉니다.

= MATCH ( ROW(A2:A9), ROW(A2:A9) )
= MATCH ( { 2,3,4,5,6,7,8,9 }, { 2,3,4,5,6,7,8,9 } )
= { 1,2,3,4,5,6,7,8 } 행 번호가 아니라 1부터 시작하는 순번이 됩니다.
3

조건을 만족하는 순번만 남깁니다

IF 함수가 참인 자리에는 순번을 넣고, 거짓인 자리에는 빈 문자열을 넣습니다.

= IF ( { TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE }, { 1,2,3,4,5,6,7,8 }, "" )
= { 1, "", 3, "", 5, "", "", "" } 서울인 1·3·5 번째 순번만 남습니다.
4

남은 순번을 작은 것부터 하나씩 꺼냅니다

ROWS($A$1:A1) 은 아래로 채울 때마다 1, 2, 3 으로 커집니다. SMALL 함수가 그 순서대로 작은 값을 꺼내므로 첫 칸은 1, 둘째 칸은 3 이 됩니다.

= SMALL ( { 1, "", 3, "", 5, "", "", "" }, 1 )
= 1 첫 번째 칸에 들어갈 순번입니다.
= SMALL ( { 1, "", 3, "", 5, "", "", "" }, 2 )
= 3 두 번째 칸에 들어갈 순번입니다.
5

그 순번의 값을 가져옵니다

INDEX 함수가 출력범위에서 n 번째 값을 꺼냅니다.

출력할 개수보다 넓은 범위에 채우면 SMALL 함수가 #NUM! 오류를 냅니다. 공식 전체를 IFERROR 함수로 감싸면 남는 칸이 빈칸으로 정리됩니다.

= INDEX ( { 박지훈, 김진아, 박시형, 유매력, 황석훈, 박나연, 하태정, 박남기 }, { 1, 3, 5 } )
= { 박지훈, 박시형, 황석훈 } 지역이 서울인 세 사람의 이름입니다.

댓글 239

댓글 239
5 (150개 평가)
최지오
최지오 2020.02.06 19:28
천재신가요?....
감탄만 나오네
오빠두엑셀
오빠두엑셀 작성자 2020.02.07 01:58
가..감사합니다!!❤️
이도경
이도경 2020.02.07 07:16
와 ㅜㅜ 출근해서 꼭해봐야겠어요 진짜 ㅠㅠ 오빠두님최고
유정천사
유정천사 2020.02.07 09:27
왕짱~너무 멋집니다~^^
Ireer
Ireer 2020.02.07 09:41
와 늘 유투브 강의만 보다가 너무 알고싶었던 내용이라 덧글 남기러 왔습니다! 정말 대단하세요 ㅠ 그런데 혹시 여러개의 결과를 각 결과 사이에 ", "를 삽입해 1개의 셀에 표기하는게 가능할까요? 가능하다면 어떤 함수들을 병행해서 사용하면 될까요?
오빠두엑셀
오빠두엑셀 작성자 2020.02.07 18:46
Ireer 님 안녕하세요!^^*
네 물론 가능합니다. 단, 오피스 365 또는 최신버전의 엑셀을 사용중이실경우에만 TEXTJOIN 함수를 응용할 수 있는데요.
아래 공식을 이용해보시겠어요?
=TEXTJOIN(", ",TRUE,IF($찾는값=$찾을범위,$출력범위,""))

만약 엑셀 2016 이전버전을 사용중이시라면 VBA로 사용자지정함수를 작성하셔야 합니다.
관련 내용은 다른 포스트로 작성해드리겠습니다
제 답변이 도움이 되셨길 바랍니다.^-^ 감사합니다.
차트윈
차트윈 2020.02.07 15:26
잘보구 갑니다. 그런데 왠지 영상보다는 눈에들어오질 않네요^^ 항상 고급정보 공유 감사드립니다. 올한해도 준비하고 계획하는일 잘 되시길 기도합니다. 수고하세요
오빠두엑셀
오빠두엑셀 작성자 2020.02.07 18:48
안녕하세요~^^* 좋은 의견 감사드립니다.
이후 짧은 영상강의로 간단한 공식 사용법 영상을 올려드리겠습니다.
차트윈님도 올 한해 건승하시고, 준비하신 일 잘 이루시길 기원하겠습니다^-^*
감사합니다.
박원조
박원조 2020.02.08 10:21
최곱니다
혹시 지금은 필드가 두 개(지역,이름)만 있는데 3~6(지역,이름,주소, 전화번호)개 확장되었을 때 리턴 값이 다 나오게 할수는 없는지요

예제는 서울 지역 선택시 해당지역에사는 사람만 나오는데 더 확장해서 그 사람의 주소와 이름까지 옆 필드에 나왔으면 좋겠습니다 부탁드려요
오빠두엑셀
오빠두엑셀 작성자 2020.02.08 17:18
안녕하세요~^^*
해당 공식을 응용하면 됩니다.
아래처럼 수식을 변경해보시겠어요?
=IFERROR(INDEX(전체범위,SMALL(IF(($G$3=$B$3:$B$10),MATCH(ROW($B$3:$B$10), ROW($B$3:$B$10)), ""), ROWS($A$1:A1)),COLUMNS($A$1:A1)),"")

마찬가지로 배열수식으로 입력 후 자동채우기 하시면 됩니다.^^
문의주신 내용 반영해서 이번주안으로 포스트내용 업데이트 해드릴테니 다시 들려주시겠어요?
제 답변이 도움이 되셨길 바랍니다.
좋은 의견 감사드립니다.
박원조
박원조 2020.02.09 10:42
감사합니다 제가 여기저기 홍보도 많이 하고 있습니다
늘 감탄의 연속입니다~~~더 많은 복 받은실겁니다
보이지 않는 누군가에게 선을 쌓은 집은 분명 선의 열매가 열린다고 했어요
하늬돌이
하늬돌이 2020.02.09 11:07
항상 필요한 기능인데 어려워서 잘 사용을 못하고 있었는데 자세하게 설명해 주셔서 이해하는데 도움이 많이 되었습니다. 감사해요
봉도리
봉도리 2020.02.09 15:40
항상 강의 잘 보고 있습니다
위의 식 적용했을때 출력값이 두개 이상 일경우 그중 하나만 나오게 할수는 없을까요??

예제파일에서 서울 박지훈이 두개 일경우 하나만 나오게요
오빠두엑셀
오빠두엑셀 작성자 2020.02.11 00:19
안녕하세요?^^ 해당 내용은 중복값제거 함수공식을 응용하시면 됩니다.
https://www.oppadu.com/엑셀-중복값-제거-함수-공식/
=LOOKUP(2, 1/((COUNTIF($머릿글:머릿글, $출력범위)=0)*($찾을값=$찾을범위)), $출력범위)

공식을 이용해보시겠어요?
오빠두엑셀
오빠두엑셀 작성자 2020.02.11 01:17
함수공식의 5번째 예제로 자세한 인수설명과 예제파일 같이 업데이트 해드렸으니 확인해보시겠어요?^^
소중한 의견 다시한번 감사드립니다.
제 답변이 도움이 되셨길 바랍니다.^^*
김지웅
김지웅 2020.02.19 19:48
이해 안갔던 부분마저 하나씩 설명이 차근차근 잘 되어있어서 결국 이해하는데 성공하게 만들어주셨네요.
이제 회사가서 적용하는 것 만 남았는데 노력해 보겠습니다.
레전드21
레전드21 2020.02.21 10:48
데이터가 계속 추가될경우 방법에 대해 매우 궁금합니다. 데이터값을 "표"로 지정해서 응용해보았는데 찾을값이 2개까지만 불러오네요~혹시 추가로 설명가능할까요? 감사합니다.
레전드21
레전드21 2020.02.21 20:15
정말 제 업무에 꼭 필요한 함수를 찾은것 같습니다^^
vba코딩으로 데이터 입력시 sheet2(DB)로 자동입력되는 방식인데 출력범위를 '표'로 지정하고 match함수포함된 함수로 응용하면 자동채우기 하지않더라도 추가입력된 자료가 자동으로 출력이 되는데, 문제는 찾을 머리글이 6개인데 "환자명"만 나옵니다(설명이 길어져 죄송합니다)
예를들어 머리글이 "환자명","등록번호","성별"등등등인데 환자명은 정상적으로 나오는데 등록번호가 나오지 않아 "등록번호"를 "환자명"으로 바꾸면 "환자명"은 출력이 됩니다.
(혹시, 제 질문과 글이 취지에 맞지않는다면 죄송합니다)
오빠두엑셀
오빠두엑셀 작성자 2020.02.22 06:44
안녕하세요?^^
해당공식은 찾을범위가 표 형식이여도 정상동작합니다.
3. VLOOKUP 여러값/여러필드를 동시에 반환하는 공식
4. VLOOKUP 여러값/여러필드를 동적으로 반환하는 공식

두 공식을 확인해보시겠어요?^^
여러 필드를 동시에 반환할 수 있습니다.
감사합니다.
레전드21
레전드21 2020.02.22 15:26
감사합니다^^우연히 유튜브 보고 들어왔다가 제게 꼭 필요한 함수를 배울수 있었습니다.
친절한 댓글도 감사하며, 요즘 완전 초보가 엑셀배우는 재미에 시간가는줄 모르고 삽니다^^
스크랩 완료