Menu

VLOOKUP và XLOOKUP: khác nhau thế nào, nên dùng hàm nào

XLOOKUP làm được mọi việc của VLOOKUP, mặc định so khớp chính xác, không cần số thứ tự cột, tra cứu được sang trái và có đối số khi không tìm thấy. VLOOKUP vẫn là lựa chọn khi tệp phải mở được trong Excel 2019 trở về trước.

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 làm được mọi việc của VLOOKUP, với ít chỗ để sai hơn: mặc định so khớp chính xác, nhận cột trả về dưới dạng một vùng thay vì một con số, tra cứu được sang trái và có sẵn đối số "không tìm thấy". Hãy dùng VLOOKUP khi tệp phải chạy trong Excel 2019 trở về trước, nơi chưa có XLOOKUP. Trang tính dưới đây chạy cùng một phép tra cứu theo cả hai cách.

Cùng một phép tra cứu, hai hàm
G2
ABCDEFG
1ProductCategoryPriceStockLook forPear
2AppleFruit$1.2040VLOOKUP$1.50
3PearFruit$1.5025XLOOKUP$1.50
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.

Cả hai đều trả về $1,50. Bấm vào từng công thức: VLOOKUP tô viền cả bảng A2:D6 và đếm 3 cột vào trong; XLOOKUP chỉ tô viền cột nó tìm kiếm và cột nó trả về.

So sánh VLOOKUP và XLOOKUP

VLOOKUPXLOOKUP
Phiên bản ExcelTất cảExcel 2021, 2024, Microsoft 365, web
Kiểu so khớp mặc địnhGần đúng (nếu bỏ trống đối số thứ 4)Chính xác
Cột trả vềMột con số đếm vào trong bảngMột vùng
Chèn cột vào giữa bảngTrả về sai cộtVẫn chạy đúng
Tra cứu sang tráiKhôngCó
Không tìm thấy giá trị#N/A, bọc trong IFNAĐối số thứ 4, "Not found"
Kết quả khớp cuối cùngKhôngsearch_mode -1
Nhiều cột cùng lúcMỗi công thức một cột (hoặc {2,3} làm số thứ tự cột trong Microsoft 365)Vùng trả về gồm nhiều cột sẽ tràn ra tất cả
So khớp gần đúngGiá trị nhỏ hơn kế tiếp, dữ liệu phải được sắp xếpGiá trị nhỏ hơn hoặc lớn hơn kế tiếp, thứ tự bất kỳ
Ký tự đại diệnBật khi dùng FALSEChỉ khi match_mode là 2
Tra cứu theo hàng ngangCần HLOOKUPCùng một hàm

Cả hai đều bỏ qua chữ hoa chữ thường. Khi so khớp chính xác, cả hai đều trả về kết quả khớp đầu tiên tính từ trên xuống, trừ khi XLOOKUP được yêu cầu tìm từ dưới lên.

Không tìm thấy: IFNA so với đối số thứ tư

Sản phẩm không có trong danh sách
G2
ABCDEFG
1ProductCategoryPriceStockLook forKiwi
2AppleFruit$1.2040VLOOKUP#N/A
3PearFruit$1.5025with IFNANot found
4CarrotVegetable$0.8060XLOOKUPNot found
5BreadBakery$2.4015
6MilkDairy$1.1030
#N/A Giá trị bạn tìm không có trong vùng tra cứu.

VLOOKUP thuần hiện #N/A. VLOOKUP cần bọc trong IFNA để hiện văn bản, còn XLOOKUP làm việc đó bằng đối số thứ tư. Gõ Milk vào G1 thì cả ba đều khớp nhau: $1,10.

Tra cứu sang trái và di chuyển cột

Hai giới hạn về cấu trúc của VLOOKUP đều đến từ số thứ tự cột. Hàm chỉ đếm được sang bên phải cột nó tìm kiếm, và con số này không đổi khi bảng thay đổi: chèn một cột vào giữa Category và Price, =VLOOKUP(G1,A2:D6,3,FALSE) vẫn trả về cột 3, giờ là cột mới. XLOOKUP tham chiếu cột trả về dưới dạng một vùng, nên Excel điều chỉnh nó như mọi tham chiếu khác, và cột tìm kiếm có thể nằm ở bất cứ đâu.

Tìm sản phẩm theo giá (tra cứu sang trái)
G2
ABCDEFG
1ProductCategoryPriceStockPrice$0.80
2AppleFruit$1.2040XLOOKUPCarrot
3PearFruit$1.5025INDEX MATCHCarrot
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.

Cả hai đều trả về Carrot. Không có phiên bản VLOOKUP nào cho việc này: tên sản phẩm nằm bên trái giá. Trong Excel cũ, lời giải là INDEX MATCH, như ở G3, cách này cũng không hỏng khi chèn cột. Trang INDEX và MATCH giải thích chi tiết.

So khớp gần đúng theo cả hai cách

Với các bậc giá trị, VLOOKUP dùng TRUE và cần cột đầu tiên được sắp xếp tăng dần. XLOOKUP dùng match_mode -1 và không cần sắp xếp, còn match_mode 1 cho giá trị lớn hơn kế tiếp, việc mà VLOOKUP không làm được.

Tỷ lệ hoa hồng theo doanh số
E2
ABCDE
1Sales fromRateSales4,200
200%VLOOKUP3%
310003%XLOOKUP3%
450005%
5100008%
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.

Cả hai đều trả về 3% cho 4.200. Đổi E1 thành 10000 thì cả hai trả về 8%.

Khi nào nên giữ VLOOKUP

  • Tệp được chia sẻ với người dùng Excel 2019, 2016 hoặc cũ hơn. Ở đó XLOOKUP hiện #NAME?. INDEX MATCH là lựa chọn khác chạy được ở mọi nơi.
  • Workbook đã có hàng trăm hàm VLOOKUP đang chạy tốt. Viết lại chúng chẳng được bao nhiêu; hãy dùng XLOOKUP cho các công thức mới.

Tốc độ không phải lý do để chọn hàm nào. Trên các trang tính thông thường, cả hai đều cho kết quả tức thì, còn với danh sách đã sắp xếp rất lớn, tìm kiếm nhị phân của XLOOKUP (search_mode 2) và VLOOKUP với TRUE đều nhanh.

Google Sheets hỗ trợ cả hai hàm với cùng các đối số.

Luyện tập: viết lại một hàm VLOOKUP

Từ VLOOKUP sang XLOOKUP
G2
ABCDEFG
1ProductCategoryPriceStockLook forBread
2AppleFruit$1.2040Stock
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: =VLOOKUP(G1,A2:D6,4,FALSE) trả về số lượng tồn kho của sản phẩm trong G1. Trong G2, viết cùng phép tra cứu đó bằng XLOOKUP.

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

XLOOKUP có tốt hơn VLOOKUP không?

Với công việc mới trong Excel 2021 hoặc Microsoft 365 thì có: hàm mặc định so khớp chính xác, không có số thứ tự cột dễ hỏng khi cột bị di chuyển, tra cứu được sang trái và có sẵn văn bản báo không tìm thấy. VLOOKUP chỉ tốt hơn khi tệp phải chạy trong Excel 2019 trở về trước, nơi XLOOKUP hiện #NAME?.

XLOOKUP có nhanh hơn VLOOKUP không?

Không tới mức bạn nhận ra trên các trang tính thông thường; cả hai đều tìm qua vài nghìn hàng ngay lập tức. Với dữ liệu đã sắp xếp rất lớn, chế độ tìm kiếm nhị phân của XLOOKUP (search_mode 2) nhanh hơn tìm tuần tự, và VLOOKUP với TRUE cũng tìm kiếm nhị phân.

XLOOKUP và INDEX MATCH khác nhau thế nào?

Hai cách làm được cùng các phép tra cứu. XLOOKUP là một hàm duy nhất, đối số đơn giản hơn và có đối số khi không tìm thấy; INDEX MATCH chạy trong mọi phiên bản Excel. =XLOOKUP(F2,A2:A6,C2:C6) và =INDEX(C2:C6,MATCH(F2,A2:A6,0)) trả về cùng một giá trị.

Làm sao chuyển VLOOKUP sang XLOOKUP?

Giữ nguyên giá trị cần tìm, tách bảng thành cột đầu tiên và cột cần trả về, rồi bỏ số thứ tự cột và FALSE: =VLOOKUP(F2,A2:D6,3,FALSE) thành =XLOOKUP(F2,A2:A6,C2:C6).

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