=XLOOKUP(F2,A2:A6,C2:C6)은 A2:A6에서 F2의 값을 찾아 C2:C6의 같은 행 값을 반환합니다. 기본적으로 정확히 일치하는 값을 찾고, 검색 열은 어디에 있어도 되며, Excel 2021이나 Microsoft 365가 필요합니다(Excel 2019 이하에서는 INDEX와 MATCH를 쓰세요). F2에 다른 상품을 입력해 보세요.
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Stock | Look for | Price | |
| 2 | Apple | Fruit | $1.20 | 40 | Bread | $2.40 | |
| 3 | Pear | Fruit | $1.50 | 25 | |||
| 4 | Carrot | Vegetable | $0.80 | 60 | |||
| 5 | Bread | Bakery | $2.40 | 15 | |||
| 6 | Milk | Dairy | $1.10 | 30 |
G2를 클릭하면 검색 범위와 반환 범위가 따로 테두리로 표시됩니다. C2:C6을 B2:B6으로 바꾸면 G2가 분류를 반환합니다. 세어야 할 열 번호가 없으므로 A열과 C열 사이에 열을 삽입해도 수식이 망가지지 않습니다. 엑셀이 두 범위를 함께 옮깁니다.
XLOOKUP 구문
=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
| 인수 | 하는 일 | 기본값 |
|---|---|---|
lookup_value | 찾을 값입니다. | 필수 |
lookup_array | 검색할 열(또는 행)입니다. | 필수 |
return_array | 값을 반환할 열, 행 또는 블록입니다. lookup_array와 높이가 같아야 합니다. | 필수 |
if_not_found | 일치하는 값이 없을 때 보여 줄 값입니다. | #N/A |
match_mode | 0 정확히 일치, -1 정확히 일치 또는 다음으로 작은 값, 1 정확히 일치 또는 다음으로 큰 값, 2 와일드카드. | 0 |
search_mode | 1 처음부터 끝까지, -1 끝에서 처음까지, 2와 -2는 정렬된 데이터에서 이진 검색. | 1 |
처음 세 개만 필수입니다. 선택 인수를 건너뛰고 그 뒤 인수를 설정하려면 쉼표 사이를 비워 두세요. =XLOOKUP(F2,A2:A6,C2:C6,,0,-1)은 search_mode를 설정하고 if_not_found는 기본값으로 둡니다.
여러 열을 한 번에 반환하기
XLOOKUP에 여러 열 너비의 반환 범위를 주면 행 전체가 돌아옵니다. 결과는 수식 옆 셀로 분산됩니다.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Category | Price | Stock |
| 2 | Apple | Fruit | $1.20 | 40 |
| 3 | Pear | Fruit | $1.50 | 25 |
| 4 | Carrot | Vegetable | $0.80 | 60 |
| 5 | Bread | Bakery | $2.40 | 15 |
| 6 | Milk | Dairy | $1.10 | 30 |
| 7 | Look for | Carrot | ||
| 8 | Result | Vegetable | $0.80 | 60 |
B8의 수식 하나가 B8:D8을 Vegetable, $0.80, 60으로 채웁니다. C8에 무언가를 입력하면 결과가 들어갈 자리가 없어 B8에 #SPILL!이 나오고, 지우면 결과가 돌아옵니다. 열을 다른 순서로 반환하려면 반환 범위를 CHOOSECOLS로 감싸세요. =XLOOKUP(B7,A2:A6,CHOOSECOLS(B2:D6,3,1))은 Stock, 그다음 Category를 반환합니다.
왼쪽 열을 가져오는 XLOOKUP, 일치 값이 없을 때 메시지
검색 열이 맨 앞에 올 필요가 없습니다. 여기서 XLOOKUP은 C열의 가격을 검색해 A열의 상품명을 반환하는데, VLOOKUP으로는 할 수 없는 일입니다. 네 번째 인수는 그 가격의 상품이 없을 때 보여 줄 값을 정합니다.
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Stock | Price | Product | |
| 2 | Apple | Fruit | $1.20 | 40 | $2.40 | Bread | |
| 3 | Pear | Fruit | $1.50 | 25 | |||
| 4 | Carrot | Vegetable | $0.80 | 60 | |||
| 5 | Bread | Bakery | $2.40 | 15 | |||
| 6 | Milk | Dairy | $1.10 | 30 |
$2.40은 Bread를 반환합니다. F2를 3으로 바꾸면 G2에 #N/A 대신 "No product"가 나옵니다. 네 번째 인수로 ""를 쓰면 비어 보이는 셀이 됩니다. if_not_found는 "찾을 수 없음"만 처리합니다. 높이가 맞지 않는 반환 범위는 여전히 #VALUE!를 내며, 그것은 보여야 하는 오류입니다.
마지막 일치 값 찾기
XLOOKUP은 위에서부터 첫 번째로 일치하는 값을 반환합니다. 여섯 번째 인수 search_mode를 -1로 설정하면 아래에서부터 검색하므로 마지막으로 일치하는 값을 반환합니다. 최근 주문, 가장 최근 가격, 마지막 상태를 찾을 때 씁니다.
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Date | Customer | Amount | Customer | First | Last | |
| 2 | 2026-03-02 | Ben | 120 | Ben | 120 | 60 | |
| 3 | 2026-03-05 | Ana | 80 | ||||
| 4 | 2026-03-09 | Ben | 45 | ||||
| 5 | 2026-03-12 | Cara | 200 | ||||
| 6 | 2026-03-20 | Ben | 60 | ||||
| 7 | 2026-03-24 | Ana | 95 |
Ben의 첫 주문은 120, 마지막 주문은 60입니다. E2를 Ana로 바꾸면 80과 95가 나옵니다. 이 방법은 행이 날짜 순서대로 있어야 합니다. 그렇지 않다면 대신 고객의 가장 최근 날짜를 조회하세요: =XLOOKUP(1,(B2:B7=E2)*(A2:A7=MAXIFS(A2:A7,B2:B7,E2)),C2:C7).
유사 일치: 다음으로 작은 값, 다음으로 큰 값
match_mode -1은 정확히 일치하는 값을, 없으면 다음으로 작은 값을 반환합니다. 수수료 단계, 세율 구간, 등급 같은 구간의 규칙입니다. TRUE를 쓰는 VLOOKUP과 달리 표를 정렬할 필요가 없습니다. 아래 구간은 일부러 순서 없이 두었습니다.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Sales from | Rate | Rep | Sales | Rate | |
| 2 | 5000 | 5% | Ana | 750 | 0% | |
| 3 | 0 | 0% | Ben | 4,200 | 3% | |
| 4 | 10000 | 8% | Cara | 5,000 | 5% | |
| 5 | 1000 | 3% | Dev | 12,500 | 8% |
Ben의 4,200은 1,000과 5,000 사이에 있으므로 1,000 구간의 3%를 받습니다. Cara의 5,000은 정확히 일치해 5%입니다. match_mode 1은 반대로 정확히 일치하거나 다음으로 큰 값을 찾으며, "들어가는 가장 작은 상자"나 "다음 배송 시간대"를 구할 때 씁니다. =XLOOKUP(18,{5;12;25;50},{"S";"M";"L";"XL"},,1)은 L을 반환합니다.
와일드카드를 쓰는 XLOOKUP
match_mode 2는 *(아무 문자열)와 ?(한 글자)를 와일드카드로 바꿉니다. 이 모드가 없으면 XLOOKUP은 그 문자 자체를 찾습니다. 정확히 일치에서 와일드카드를 받아들이는 VLOOKUP과 반대이며, 와일드카드 XLOOKUP이 #N/A나 if_not_found 텍스트를 반환하는 흔한 이유입니다:
=XLOOKUP("*coffee*",A2:A6,C2:C6,"None") None: no product is named *coffee*
=XLOOKUP("*coffee*",A2:A6,C2:C6,"None",2) 2.9, the price of Iced coffee
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Contains | Price | |
| 2 | Green tea | Drinks | $3.20 | coffee | $2.90 | |
| 3 | Iced coffee | Drinks | $2.90 | |||
| 4 | Coffee beans | Pantry | $8.50 | |||
| 5 | Black tea | Drinks | $2.70 | |||
| 6 | Orange juice | Drinks | $3.40 |
"coffee"는 Iced coffee를 먼저 찾아 $2.90을 냅니다. 여섯 번째 인수로 -1을 추가하면 Coffee beans를 찾아 $8.50을 냅니다. 엑셀의 다른 모든 조회처럼 일치는 대소문자를 무시합니다. match_mode 2에서 실제 별표나 물음표를 찾으려면 앞에 물결표를 붙이세요: "~*".
양방향 XLOOKUP
행 전체를 반환하는 XLOOKUP을 두 번째 XLOOKUP의 반환 범위로 쓸 수 있습니다. 안쪽 XLOOKUP이 지역으로 행을 고르고, 바깥쪽 XLOOKUP이 그 행에서 해당 월의 열을 고릅니다.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Region | Jan | Feb | Mar |
| 2 | North | 4,200 | 3,900 | 4,800 |
| 3 | South | 3,100 | 3,600 | 3,300 |
| 4 | East | 5,200 | 4,700 | 5,600 |
| 5 | West | 2,800 | 3,000 | 3,400 |
| 6 | Region | South | ||
| 7 | Month | Feb | ||
| 8 | Sales | 3,600 |
XLOOKUP(B6,A2:A5,B2:D5)는 South의 행인 3100, 3600, 3300을 반환합니다. 바깥쪽 XLOOKUP은 B1:D1에서 Feb를 찾아 그 행의 해당 값인 3,600을 가져옵니다. B6과 B7에서 다른 지역과 월을 골라 보세요. 같은 조회를 INDEX와 MATCH로 쓴 버전은 INDEX와 MATCH 페이지에 있습니다.
이전 엑셀과 Google 스프레드시트의 XLOOKUP
XLOOKUP은 Excel 2021, Excel 2024, Microsoft 365, 웹용 Excel, 모바일 앱에 있습니다. XLOOKUP을 쓴 파일을 Excel 2019 이하에서 열면 다시 계산되는 즉시 수식이 #NAME?을 표시합니다. 파일이 모든 곳에서 동작해야 한다면 모든 버전이 이해하는 INDEX와 MATCH로 조회를 쓰세요:
=XLOOKUP(F2, A2:A6, C2:C6, "Not found")
=IFNA(INDEX(C2:C6, MATCH(F2, A2:A6, 0)), "Not found")
Google 스프레드시트에는 2022년부터 같은 인수의 XLOOKUP이 있습니다. 차이를 나란히 비교하려면 VLOOKUP과 XLOOKUP 비교를 보세요. 두 열(상품과 크기, 이름과 날짜)을 한 번에 기준으로 삼는 =XLOOKUP(1,(B2:B6=E2)*(C2:C6=F2),D2:D6) 패턴은 여러 조건으로 조회하기 페이지에서 설명합니다.
연습: 가격 또는 "Not found"
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Stock | Look for | Price | |
| 2 | Apple | Fruit | $1.20 | 40 | Kiwi | ||
| 3 | Pear | Fruit | $1.50 | 25 | |||
| 4 | Carrot | Vegetable | $0.80 | 60 | |||
| 5 | Bread | Bakery | $2.40 | 15 | |||
| 6 | Milk | Dairy | $1.10 | 30 |
직접 해 보세요: G2에서 F2에 있는 상품의 가격을 반환하고, 목록에 없으면 텍스트 Not found를 반환하세요.
연습: 주문 금액별 할인
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Order from | Discount | Order | Discount | |
| 2 | $0 | 0% | $320 | ||
| 3 | $100 | 5% | |||
| 4 | $250 | 10% | |||
| 5 | $500 | 15% |
직접 해 보세요: 각 할인은 해당 주문 금액 이상부터 적용됩니다. E2에서 XLOOKUP으로 D2 주문 금액의 할인율을 반환하세요.
자주 묻는 질문
엑셀에서 XLOOKUP은 어떻게 쓰나요?
인수 세 개를 넣습니다. 찾을 값, 검색할 열, 반환할 열입니다. =XLOOKUP("Pear",A2:A6,C2:C6)은 A2:A6에서 Pear를 찾아 C2:C6의 같은 행 값을 반환합니다. 따로 지정하지 않으면 정확히 일치하는 값을 찾습니다.
어떤 엑셀 버전에 XLOOKUP이 있나요?
Excel 2021, Excel 2024, Microsoft 365, 웹용 Excel입니다. Excel 2019 이하에서는 수식이 #NAME?을 표시하므로 그곳에서는 =INDEX(C2:C6,MATCH(F2,A2:A6,0))을 쓰세요. Google 스프레드시트에도 XLOOKUP이 있습니다.
XLOOKUP이 #N/A 대신 빈칸이나 텍스트를 반환하게 하려면 어떻게 하나요?
네 번째 인수 if_not_found를 씁니다: =XLOOKUP(F2,A2:A6,C2:C6,"Not found"), 비어 보이는 셀을 원하면 ""를 씁니다. 찾지 못한 경우만 바꾸며, 다른 오류는 그대로 보입니다.
XLOOKUP으로 마지막 일치 값을 찾으려면 어떻게 하나요?
여섯 번째 인수 search_mode를 -1로 설정해 아래에서 위로 검색하게 합니다. =XLOOKUP("Ben",B2:B7,C2:C7,,0,-1)은 Ben의 첫 금액 대신 마지막 금액을 반환합니다.
XLOOKUP이 열을 여러 개 반환할 수 있나요?
있습니다. =XLOOKUP(F2,A2:A6,B2:D6)처럼 여러 열 너비의 반환 범위를 주면 결과가 옆 셀로 분산됩니다. 분산될 셀은 비어 있어야 하며, 아니면 엑셀이 #SPILL!을 표시합니다.