Menu

Hàm XLOOKUP trong Excel: công thức, ví dụ và chế độ so khớp

=XLOOKUP(F2,A2:A6,C2:C6) tìm F2 trong A2:A6 và trả về giá trị ở cùng hàng của C2:C6. Văn bản khi không tìm thấy, trả về nhiều cột cùng lúc, tra cứu sang trái, kết quả khớp cuối cùng, so khớp gần đúng và ký tự đại diện.

Mọi bảng tính trên trang này đều trực tiếp: đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

=XLOOKUP(F2,A2:A6,C2:C6) tìm giá trị trong F2 ở A2:A6 và trả về giá trị ở cùng hàng của C2:C6. Mặc định hàm tìm kết quả khớp chính xác, cột tìm kiếm có thể nằm ở bất cứ đâu, và hàm cần Excel 2021 hoặc Microsoft 365 (với Excel 2019 trở về trước, hãy dùng INDEX và MATCH). Thử gõ một sản phẩm khác vào F2.

Giá của một sản phẩm
G2
ABCDEFG
1ProductCategoryPriceStockLook forPrice
2AppleFruit$1.2040Bread$2.40
3PearFruit$1.5025
4CarrotVegetable$0.8060
5BreadBakery$2.4015
6MilkDairy$1.1030
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Bấm vào G2: vùng tìm kiếm và vùng trả về được tô viền riêng. Đổi C2:C6 thành B2:B6 thì G2 trả về danh mục. Không có số thứ tự cột nào phải đếm, nên chèn một cột vào giữa A và C không làm hỏng công thức: Excel tự dịch chuyển cả hai vùng.

Cú pháp XLOOKUP

=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
Đối sốTác dụngMặc định
lookup_valueGiá trị cần tìm.bắt buộc
lookup_arrayCột (hoặc hàng) để tìm kiếm.bắt buộc
return_arrayCột, hàng hoặc khối ô để lấy kết quả. Cùng chiều cao với lookup_array.bắt buộc
if_not_foundNội dung hiển thị khi không có gì khớp.#N/A
match_mode0 chính xác, -1 chính xác hoặc nhỏ hơn kế tiếp, 1 chính xác hoặc lớn hơn kế tiếp, 2 ký tự đại diện.0
search_mode1 từ đầu đến cuối, -1 từ cuối lên đầu, 2 và -2 tìm kiếm nhị phân trên dữ liệu đã sắp xếp.1

Chỉ ba đối số đầu là bắt buộc. Để bỏ qua một đối số tùy chọn và đặt một đối số phía sau, hãy để trống nó giữa hai dấu phẩy: =XLOOKUP(F2,A2:A6,C2:C6,,0,-1) đặt search_mode và để if_not_found ở giá trị mặc định.

Trả về nhiều cột cùng lúc

Đưa cho XLOOKUP một vùng trả về rộng nhiều cột, bạn sẽ nhận lại cả hàng. Kết quả tràn sang các ô bên cạnh công thức.

Mọi trường của một sản phẩm
B8
ABCD
1ProductCategoryPriceStock
2AppleFruit$1.2040
3PearFruit$1.5025
4CarrotVegetable$0.8060
5BreadBakery$2.4015
6MilkDairy$1.1030
7Look forCarrot
8ResultVegetable$0.8060
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Một công thức trong B8 điền B8:D8 bằng Vegetable, $0,80 và 60. Gõ gì đó vào C8 thì B8 hiện #SPILL!, vì kết quả không còn chỗ; xóa nó đi thì kết quả quay lại. Để trả về các cột theo thứ tự khác, bọc vùng trả về trong CHOOSECOLS: =XLOOKUP(B7,A2:A6,CHOOSECOLS(B2:D6,3,1)) cho ra Stock, rồi đến Category.

XLOOKUP sang trái, và thông báo khi không khớp

Cột tìm kiếm không cần đứng đầu. Ở đây XLOOKUP tìm trong cột giá C và trả về tên sản phẩm ở cột A, việc mà VLOOKUP không làm được. Đối số thứ tư cho biết cần hiện gì khi không có sản phẩm nào có mức giá đó.

Sản phẩm nào có giá này?
G2
ABCDEFG
1ProductCategoryPriceStockPriceProduct
2AppleFruit$1.2040$2.40Bread
3PearFruit$1.5025
4CarrotVegetable$0.8060
5BreadBakery$2.4015
6MilkDairy$1.1030
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

$2,40 trả về Bread. Đổi F2 thành 3 thì G2 hiện "No product" thay vì #N/A. "" ở đối số thứ tư cho ra một ô trông như trống. if_not_found chỉ xử lý trường hợp "không tìm thấy": một vùng trả về sai chiều cao vẫn cho lỗi #VALUE!, và đó là điều bạn muốn thấy.

Tìm kết quả khớp cuối cùng

XLOOKUP trả về kết quả khớp đầu tiên tính từ trên xuống. Đặt search_mode, đối số thứ sáu, là -1 thì hàm tìm từ dưới lên, nên trả về kết quả khớp cuối cùng: đơn hàng mới nhất, mức giá gần đây nhất, trạng thái sau cùng.

Đơn hàng đầu tiên và cuối cùng của một khách hàng
G2
ABCDEFG
1DateCustomerAmountCustomerFirstLast
22026-03-02Ben120Ben12060
32026-03-05Ana80
42026-03-09Ben45
52026-03-12Cara200
62026-03-20Ben60
72026-03-24Ana95
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đơn hàng đầu tiên của Ben là 120 và đơn cuối cùng là 60. Đổi E2 thành Ana: 80 và 95. Cách này dựa vào việc các hàng được xếp theo thứ tự ngày. Nếu không, hãy tra cứu ngày mới nhất của khách hàng: =XLOOKUP(1,(B2:B7=E2)*(A2:A7=MAXIFS(A2:A7,B2:B7,E2)),C2:C7).

So khớp gần đúng: nhỏ hơn kế tiếp hoặc lớn hơn kế tiếp

match_mode -1 trả về kết quả khớp chính xác, hoặc nếu không có thì trả về giá trị nhỏ hơn kế tiếp. Đó là quy tắc cho các bậc: mức hoa hồng, bậc thuế, xếp loại điểm. Không giống VLOOKUP với TRUE, bảng không cần được sắp xếp. Các bậc bên dưới được cố ý xếp không theo thứ tự nào.

Tỷ lệ hoa hồng theo doanh số
F2
ABCDEF
1Sales fromRateRepSalesRate
250005%Ana7500%
300%Ben4,2003%
4100008%Cara5,0005%
510003%Dev12,5008%
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Con số 4.200 của Ben nằm giữa 1.000 và 5.000, nên Ben nhận 3% của bậc 1.000. Con số 5.000 của Cara khớp chính xác, 5%. match_mode 1 làm theo chiều ngược lại, chính xác hoặc lớn hơn kế tiếp, để trả lời những câu như "chiếc hộp nhỏ nhất vừa đủ" hay "khung giờ giao hàng kế tiếp": =XLOOKUP(18,{5;12;25;50},{"S";"M";"L";"XL"},,1) trả về L.

XLOOKUP với ký tự đại diện

match_mode 2 biến * (số ký tự bất kỳ) và ? (một ký tự) thành ký tự đại diện. Nếu không có nó, XLOOKUP tìm đúng các ký tự đó theo nghĩa đen, ngược với VLOOKUP (chế độ so khớp chính xác của VLOOKUP chấp nhận ký tự đại diện), và đó thường là lý do một hàm XLOOKUP dùng ký tự đại diện trả về #N/A hoặc văn bản 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
Sản phẩm đầu tiên có tên chứa văn bản cần tìm
F2
ABCDEF
1ProductCategoryPriceContainsPrice
2Green teaDrinks$3.20coffee$2.90
3Iced coffeeDrinks$2.90
4Coffee beansPantry$8.50
5Black teaDrinks$2.70
6Orange juiceDrinks$3.40
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

"coffee" tìm thấy Iced coffee trước, 2,90.The^m‘−1‘laˋmđo^ˊiso^ˊthứsaˊuthıˋhaˋmtıˋmtha^ˊyCoffeebeans,2,90. Thêm `-1` làm đối số thứ sáu thì hàm tìm thấy Coffee beans, 8,50. Như mọi phép tra cứu trong Excel, so khớp bỏ qua chữ hoa chữ thường. Để tìm một dấu sao hoặc dấu hỏi thật trong match_mode 2, hãy đặt dấu ngã trước nó: "~*".

XLOOKUP hai chiều

Một hàm XLOOKUP trả về cả hàng có thể làm vùng trả về cho một hàm XLOOKUP thứ hai. Hàm bên trong chọn hàng theo khu vực, hàm bên ngoài chọn cột tháng từ hàng đó.

Doanh số theo khu vực và tháng
B8
ABCD
1RegionJanFebMar
2North4,2003,9004,800
3South3,1003,6003,300
4East5,2004,7005,600
5West2,8003,0003,400
6RegionSouth
7MonthFeb
8Sales3,600
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

XLOOKUP(B6,A2:A5,B2:D5) trả về hàng của South, gồm 3100, 3600 và 3300. Hàm XLOOKUP bên ngoài tìm Feb trong B1:D1 và lấy giá trị tương ứng từ hàng đó: 3.600. Hãy chọn khu vực và tháng khác ở B6 và B7. Phiên bản INDEX và MATCH của cùng phép tra cứu này có ở trang INDEX và MATCH.

XLOOKUP trong Excel cũ và Google Sheets

XLOOKUP có trong Excel 2021, Excel 2024, Microsoft 365, Excel cho web và các ứng dụng di động. Nếu bạn mở một tệp dùng hàm này trong Excel 2019 trở về trước, các công thức hiện #NAME? ngay khi chúng tính lại. Khi tệp phải chạy ở mọi nơi, hãy viết phép tra cứu bằng INDEX và MATCH, phiên bản nào cũng hiểu:

=XLOOKUP(F2, A2:A6, C2:C6, "Not found")
=IFNA(INDEX(C2:C6, MATCH(F2, A2:A6, 0)), "Not found")

Google Sheets có XLOOKUP từ năm 2022, với cùng các đối số. Để xem các điểm khác nhau đặt cạnh nhau, xem VLOOKUP và XLOOKUP. Để so khớp trên hai cột cùng lúc (sản phẩm và kích cỡ, tên và ngày), mẫu =XLOOKUP(1,(B2:B6=E2)*(C2:C6=F2),D2:D6) được giải thích ở trang tra cứu nhiều điều kiện.

Luyện tập: một mức giá, hoặc "Not found"

Bảng giá
G2
ABCDEFG
1ProductCategoryPriceStockLook forPrice
2AppleFruit$1.2040Kiwi
3PearFruit$1.5025
4CarrotVegetable$0.8060
5BreadBakery$2.4015
6MilkDairy$1.1030
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đến lượt bạn: Trong G2, trả về giá của sản phẩm trong F2, hoặc văn bản Not found khi sản phẩm không có trong danh sách.

Luyện tập: chiết khấu theo giá trị đơn hàng

Các bậc chiết khấu
E2
ABCDE
1Order fromDiscountOrderDiscount
2$00%$320
3$1005%
4$25010%
5$50015%
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đến lượt bạn: Mỗi mức chiết khấu áp dụng từ giá trị đơn hàng của nó trở lên. Trong E2, dùng XLOOKUP để trả về mức chiết khấu cho giá trị đơn hàng trong D2.

Câu hỏi thường gặp

Cách dùng hàm XLOOKUP trong Excel?

Đưa vào ba đối số: giá trị cần tìm, cột để tìm kiếm và cột để trả về. =XLOOKUP("Pear",A2:A6,C2:C6) tìm Pear trong A2:A6 và trả về giá trị ở cùng hàng của C2:C6. Hàm tìm kết quả khớp chính xác, trừ khi bạn chỉ định khác.

Những phiên bản Excel nào có XLOOKUP?

Excel 2021, Excel 2024, Microsoft 365 và Excel cho web. Trong Excel 2019 trở về trước, công thức hiện #NAME?; ở đó hãy dùng =INDEX(C2:C6,MATCH(F2,A2:A6,0)). Google Sheets cũng có XLOOKUP.

Làm sao để XLOOKUP trả về ô trống hoặc văn bản thay vì #N/A?

Dùng đối số thứ tư, if_not_found: =XLOOKUP(F2,A2:A6,C2:C6,"Not found"), hoặc "" để có một ô trông như trống. Đối số này chỉ thay thế trường hợp không tìm thấy; các lỗi khác vẫn hiện ra.

Làm sao tìm kết quả khớp cuối cùng bằng XLOOKUP?

Đặt đối số thứ sáu, search_mode, là -1 để tìm từ dưới lên: =XLOOKUP("Ben",B2:B7,C2:C7,,0,-1) trả về số tiền cuối cùng của Ben thay vì số tiền đầu tiên.

XLOOKUP có trả về nhiều hơn một cột được không?

Có. Đưa cho hàm một vùng trả về rộng nhiều cột, như =XLOOKUP(F2,A2:A6,B2:D6), và kết quả sẽ tràn sang các ô bên cạnh. Các ô bị tràn vào phải trống, nếu không Excel hiện #SPILL!.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu