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

엑셀 VLOOKUP 두 번째·n번째 값 찾기 공식

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

반복된 조회 키의 두 번째·n번째 대응값을 찾는 공식입니다.

엑셀 VLOOKUP 두 번째·n번째 값 찾기 공식 예제 미리보기
예제 미리보기 크게 보기

인수 설명

012021 이후 버전 공식

=INDEX ( FILTER ( 출력범위, 찾을범위=찾을값 ), N번째 )
인수 설명 자세히 보기(인수를 클릭하면 해당 영역만 강조됩니다. 여러 개를 함께 켜고 끌 수 있습니다.)
인수구분설명
출력범위필수찾은 항목에 대응해 반환할 값이 입력된 범위입니다. 찾을범위와 행 수가 같아야 합니다.
찾을범위필수찾을값과 비교할 조회 키가 입력된 범위입니다. 출력범위와 행 수가 같아야 합니다.
찾을값필수반복된 조회 키에서 찾을 값입니다.
N번째필수일치한 값 중 몇 번째 대응값을 반환할지 지정하는 양의 정수입니다.
F2=INDEX(FILTER($B$2:$B$8,$A$2:$A$8=$D$2),$E$2)
A
B
C
D
E
F
G
1
상품
주문수량
찾을상품
순번
결과
2
사과
120
사과
3
130
3
90
4
사과
150
5
80
6
사과
130
7
110
8
사과
170
9
FILTER 함수가 A2:A8에서 사과인 행의 B2:B8 대응값을 {120;150;130;170}으로 추리고, INDEX 함수가 세 번째 값 130을 F2 셀에 반환합니다.

02모든 버전 호환 배열수식

{=INDEX ( 출력범위, SMALL ( IF ( 찾을값=찾을범위, ROW ( 찾을범위 )-ROW ( 시작셀 )+1 ), N번째 ) )}
인수 설명 자세히 보기
인수구분설명
출력범위필수찾은 항목에 대응해 반환할 값이 입력된 범위입니다. 찾을범위와 행 수가 같아야 합니다.
찾을값필수반복된 조회 키에서 찾을 값입니다.
찾을범위필수찾을값과 비교할 조회 키가 입력된 범위입니다. 출력범위와 행 수가 같아야 합니다.
시작셀필수찾을범위의 첫 번째 셀입니다. 행번호를 1부터 시작하도록 보정하므로 찾을범위의 시작셀을 지정합니다.
N번째필수일치한 값 중 몇 번째 대응값을 반환할지 지정하는 양의 정수입니다.
F2{=INDEX($B$2:$B$8,SMALL(IF($D$2=$A$2:$A$8,ROW($A$2:$A$8)-ROW($A$2)+1),$E$2))}
A
B
C
D
E
F
G
1
상품
주문수량
찾을상품
순번
결과
2
사과
120
사과
3
130
3
90
4
사과
150
5
80
6
사과
130
7
110
8
사과
170
9
IF 함수가 사과인 행의 순번 {1;FALSE;3;FALSE;5;FALSE;7}을 만들고, SMALL 함수와 INDEX 함수가 세 번째 대응값 130을 F2 셀에 반환합니다. Excel 2019 이하에서는 중괄호를 직접 입력하지 않고 Ctrl+Shift+Enter로 확정합니다.
이 공식이 사용하는 함수

동작 원리

012021 이후 버전 공식

FILTER 함수가 일치하는 대응값만 추리고 INDEX 함수가 그중 n번째 값을 반환합니다.

2021 이후 버전 공식의 예제 시트에서 F2 셀이 130을 반환하는 계산 과정입니다. 단계마다 강조된 부분이 어떻게 계산되는지 살펴보세요.

1

FILTER 함수가 일치하는 대응값을 추립니다

FILTER 함수는 A2:A8에서 D2의 사과와 같은 행만 판정해 B2:B8의 대응값 네 개를 세로 배열로 반환합니다.

=FILTER ( B2:B8, A2:A8=D2 )
= {120;150;130;170} 사과와 일치한 네 행의 대응값입니다.
2

INDEX 함수가 n번째 값을 선택합니다

INDEX 함수는 FILTER 함수가 반환한 배열에서 E2가 지정한 세 번째 값을 선택해 130을 반환합니다.

=INDEX ( FILTER ( B2:B8, A2:A8=D2 ), E2 )
= 130 세 번째 대응값입니다.

02모든 버전 호환 배열수식

ROW 함수와 IF 함수가 일치 행의 순번을 만들고, SMALL 함수와 INDEX 함수가 n번째 대응값을 반환합니다.

모든 버전 호환 배열수식의 예제 시트에서 F2 셀이 130을 반환하는 계산 과정입니다. 단계마다 강조된 부분이 어떻게 계산되는지 살펴보세요.

1

ROW 함수가 상대 순번을 만듭니다

ROW 함수로 A2:A8의 실제 행번호를 구하고 A2의 행번호를 빼 1부터 7까지의 상대 순번을 만듭니다.

=ROW ( A2:A8 )-ROW ( A2 )+1
= {1;2;3;4;5;6;7} A2:A8의 각 행에 대응하는 상대 순번입니다.
2

IF 함수가 일치 행의 순번만 남깁니다

IF 함수는 D2의 사과와 같은 행에는 상대 순번을 남기고, 다른 행에는 FALSE를 반환합니다.

=IF ( D2=A2:A8, ROW ( A2:A8 )-ROW ( A2 )+1 )
= {1;FALSE;3;FALSE;5;FALSE;7} 사과가 있는 행의 상대 순번입니다.
3

SMALL 함수가 n번째 순번을 찾습니다

SMALL 함수는 FALSE를 제외한 숫자 순번에서 E2가 지정한 세 번째로 작은 값 5를 반환합니다.

=SMALL ( IF ( D2=A2:A8, ROW ( A2:A8 )-ROW ( A2 )+1 ), E2 )
= 5 세 번째 일치 행의 상대 순번입니다.
4

INDEX 함수가 대응값을 반환합니다

INDEX 함수는 B2:B8의 다섯 번째 값인 130을 반환합니다.

=INDEX ( B2:B8, SMALL ( IF ( D2=A2:A8, ROW ( A2:A8 )-ROW ( A2 )+1 ), E2 ) )
= 130 세 번째 대응값입니다.

댓글 12

댓글 12
5 (9개 평가)
wngmal@naver.com
wngmal@naver.com 2020.08.28 16:43
함수 마스터 가즈아!
yim****
yim**** 2020.10.17 07:55
감사합니다
오빠두최고
오빠두최고 2021.10.06 16:17
정말 정말 감사합니다!! 최고예요!!!
rhdrk
rhdrk 2021.11.12 14:36
항상 좋은 자료 너무너무 감사드립니다!
추가 질문이 있는데,
찾을범위의 이름이 <정현수 임규리 김예진>, <정현수 김예진> 이런 식으로 섞여 있어도 
찾을값으로 <정현수>를 넣으면 찾을범위 이름 내에서 정현수가 포함된 모든 결과값이 나오도록 하는 방법은 없을까요?

와일드카드 "*"를 써서, 아래 처럼 넣으면 에러가 뜨더라구요 ㅠ
{ =INDEX($출력범위,SMALL(IF("*"&$찾을값&"*"=$찾을범위,ROW($찾을범위)-ROW($시작셀)+1),N번째)) }
오빠두엑셀
오빠두엑셀 작성자 2021.11.16 20:27
안녕하세요?
ISNUMBER/SEARCH 함수를 활용해보세요 ^^
{ =INDEX($출력범위,SMALL(IF(ISNUMBER(SEARCH(찾을값,찾을범위)),ROW($찾을범위)-ROW($시작셀)+1),N번째)) }
https://www.oppadu.com/if-%ED%95%A8%EC%88%98-%ED%8A%B9%EC%A0%95-%EB%AC%B8%EC%9E%90-%ED%8F%AC%ED%95%A8/
크으
크으 2022.10.06 15:33
안녕하세요 늘 명쾌한 자료 감사합니다 !
혹시 한 시트내에서가 아니라 다른 엑셀에 있는 자료를 가져올때는 안되는걸까요~??
혹시 방법이 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2022.10.06 17:36
안녕하세요.
다른 엑셀파일에서 불러오는 것도 가능합니다.^^
다만 다른 엑셀파일에서 불러올 경우에는 해당 엑셀파일이 반드시 실행된 상태여야 합니다.
어금니꽉깨물어
어금니꽉깨물어 2022.11.14 09:38
안녕하세요 항상, 잘 보고 감탄만 하고 있는 1인 입니다.
이게, 가지는 의미는 알겠는데, 구조를 이해하기 어려워 문의드립니다.

=ROW(D8:D12)-ROW(D8)+1
={8,9,10,11,12}-8+1
={1,2,3,4,5}

-> D8~D12 구간에서 ROW 함수를 쓰면 8이 반환이 될텐데, 거기에 D8+1 ROW함수를 해서 더한 값을 빼면
결국 8-8+1의 행의 값을 가져오게 될텐데,
저걸 단순하게 생각해보니, 그냥, 그냥 범위 내에서 값을 반환하면 되는 것 아닐까? 왜 전체 범위 - (전체 범위)+1을 하지? 라는 의문이 드는데,
아무래도 제가, 이해력이 부족한가 봅니다.
설명 좀 부탁드립니다 ㅠㅠ
오빠두엑셀
오빠두엑셀 작성자 2022.11.16 16:44
안녕하세요.
+1 을 해주지 않을 경우, 첫번째 값이 1-1 = 0 이 반환되어 오류가 발생하기 때문에, 1-1+1 = 1 로 첫째 행을 받아오도록 1을 더해줍니다.
답변이 도움이 되셨길 바랍니다. 감사합니다!
young_****
young_**** 2023.02.22 09:12
이거 저거 찾아보고 끙끙 대다가 이제야 이해했네요 ㅜ ㅜ 순위 중복을 그대로 나타내면서 찾을수있는 함수를 ㅜㅜ 'N번째'가 포인트 였네요 ㅜㅜ 감사합니다
융유유
융유유 2023.09.14 16:52
감사합니다
강민준🤗
강민준🤗 2024.08.11 16:50
좋은 강의 감사합니다🙇‍♂️
스크랩 완료