VLOOKUP vs INDEX/MATCH vs XLOOKUP: Chọn Hàm Nào Trong Google Sheets? [2026]
![Ảnh minh họa bài viết: VLOOKUP vs INDEX/MATCH vs XLOOKUP: Chọn Hàm Nào Trong Google Sheets? [2026]](/og-image.jpg)
Tại Sao Bạn Cần Biết Cả Ba Hàm Tra Cứu Này?
Nếu bạn làm việc thường xuyên với Google Sheets, sớm hay muộn bạn cũng sẽ cần tra cứu dữ liệu từ một bảng khác — tìm tên sản phẩm theo mã, lấy giá theo SKU, hay khớp thông tin khách hàng theo email. Đây chính xác là việc VLOOKUP, INDEX/MATCH và XLOOKUP sinh ra để làm.
Nhưng tại sao có đến ba hàm cho cùng một mục đích? Vì mỗi hàm ra đời ở một thời điểm khác nhau, giải quyết những hạn chế của hàm trước. Hiểu rõ cả ba sẽ giúp bạn:
- Chọn đúng hàm cho từng tình huống thay vì dùng bừa VLOOKUP cho mọi thứ.
- Viết công thức ổn định hơn — không bị hỏng khi ai đó thêm cột vào bảng dữ liệu.
- Xử lý được những bài toán nâng cao như tra cứu nhiều điều kiện, tìm ngược, hay trả về nhiều cột cùng lúc.
- Đọc hiểu được công thức của đồng nghiệp — dù họ dùng hàm nào.
Bài viết này sẽ đi sâu vào từng hàm với cú pháp đầy đủ, ví dụ cụ thể, ưu nhược điểm rõ ràng — sau đó so sánh trực tiếp để bạn biết khi nào dùng cái nào.
VLOOKUP — Hàm Tra Cứu Cơ Bản Nhất
VLOOKUP (Vertical Lookup) là hàm tra cứu theo chiều dọc, tìm giá trị trong cột đầu tiên của một bảng và trả về giá trị từ một cột khác cùng hàng. Đây là hàm tra cứu được dạy đầu tiên trong hầu hết các khóa học Google Sheets vì cú pháp trực quan, dễ nhớ.
Cú Pháp VLOOKUP
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
Trong đó:
- lookup_value: Giá trị bạn muốn tìm (ô A2, hoặc nhập trực tiếp "SP001").
- table_array: Vùng bảng dữ liệu cần tìm, cột đầu tiên phải chứa giá trị cần khớp.
- col_index_num: Số thứ tự cột cần trả về (đếm từ 1 trong vùng table_array).
- [range_lookup]:
0hoặcFALSE= khớp chính xác;1hoặcTRUE= khớp gần đúng. Hầu như luôn dùng0.
Ví Dụ 1: Tìm Tên Sản Phẩm Theo Mã
Bảng dữ liệu ở vùng $E$2:$G$100 với cột E = mã SP, cột F = tên SP, cột G = giá. Tìm tên sản phẩm tương ứng với mã ở A2:
=VLOOKUP(A2, $E$2:$G$100, 2, 0)
Con số 2 nghĩa là trả về cột thứ 2 trong vùng — tức là cột F (tên SP). Dấu $ khóa vùng để khi kéo công thức xuống, bảng tra cứu không bị dịch chuyển.
Ví Dụ 2: Tìm Giá Sản Phẩm
Cùng bảng trên, lấy giá (cột G = cột thứ 3 trong vùng):
=VLOOKUP(A2, $E$2:$G$100, 3, 0)
Ví Dụ 3: Kết Hợp IFERROR Để Xử Lý Không Tìm Thấy
Khi mã SP không tồn tại trong bảng, VLOOKUP trả về lỗi #N/A. Dùng IFERROR để hiển thị thông báo thân thiện hơn:
=IFERROR(VLOOKUP(A2, $E$2:$G$100, 2, 0), "Không tìm thấy")
Nhược Điểm Của VLOOKUP
- Chỉ tìm từ trái sang phải: Cột tra cứu (lookup column) phải luôn là cột đầu tiên trong bảng. Nếu giá trị cần tìm nằm ở cột thứ 2 mà bạn muốn trả về cột thứ 1, VLOOKUP không làm được.
- Nhạy cảm với thay đổi cột: Nếu ai đó chèn thêm cột vào giữa bảng dữ liệu, con số
col_index_numtrong công thức sẽ sai ngay mà không có cảnh báo — lỗi âm thầm, nguy hiểm. - Hiệu năng thấp hơn với dữ liệu lớn: VLOOKUP duyệt dữ liệu theo cơ chế cũ hơn, chậm hơn so với INDEX/MATCH hoặc XLOOKUP với bảng hàng chục nghìn dòng.
- Chỉ trả về kết quả đầu tiên: Nếu có nhiều hàng trùng khớp, VLOOKUP chỉ lấy hàng đầu tiên tìm thấy, không có cách nào lấy tất cả.
- Không có fallback tích hợp: Phải bọc thêm IFERROR bên ngoài.
INDEX/MATCH — Combo Linh Hoạt Vượt Trội
INDEX/MATCH không phải một hàm duy nhất mà là sự kết hợp của hai hàm: MATCH tìm vị trí (số thứ tự hàng) của giá trị trong một dải, và INDEX lấy giá trị tại vị trí đó từ một dải khác. Kết hợp lại, chúng tạo thành một cỗ máy tra cứu mạnh hơn VLOOKUP nhiều lần.
Cú Pháp INDEX/MATCH
=INDEX(return_range, MATCH(lookup_value, lookup_range, 0))
Phân tích từng phần:
- MATCH(lookup_value, lookup_range, 0): Tìm vị trí của
lookup_valuetronglookup_range, trả về số thứ tự hàng. Tham số0= khớp chính xác. - INDEX(return_range, vị_trí): Lấy giá trị tại hàng tương ứng trong
return_range.
Ví Dụ 1: Tra Cứu Cơ Bản (Tương Đương VLOOKUP)
Tìm tên SP trong cột F dựa trên mã SP ở cột E, với mã cần tìm ở A2:
=INDEX($F$2:$F$100, MATCH(A2, $E$2:$E$100, 0))
Bây giờ return_range và lookup_range là hai vùng độc lập — bạn tự do chỉ định cột nào tìm, cột nào trả về.
Ví Dụ 2: Tra Cứu Ngược (Điều VLOOKUP Không Làm Được)
Giả sử cột A chứa tên SP và cột B chứa mã SP. Bạn muốn tìm mã SP từ tên. Vì cột tên (A) nằm bên trái cột mã (B), VLOOKUP không làm được. INDEX/MATCH thì không thành vấn đề:
=INDEX($B$2:$B$100, MATCH(D2, $A$2:$A$100, 0))
lookup_range là cột A (tên SP), return_range là cột B (mã SP) — tra cứu ngược hoàn toàn.
Ví Dụ 3: Kết Hợp Hai Điều Kiện (Array Formula)
Tìm giá trị ở cột C khi cột A = X và cột B = Y. Đây là bài toán VLOOKUP không giải được:
=INDEX(C:C, MATCH(1, (A:A=X)*(B:B=Y), 0))
Quan trọng: Đây là công thức mảng — phải nhập bằng Ctrl+Shift+Enter (không phải Enter thông thường). Google Sheets sẽ hiển thị dấu ngoặc nhọn {} xung quanh công thức.
Ưu Điểm Của INDEX/MATCH
- Tìm ngược và tìm theo bất kỳ cột nào: Không giới hạn cột đầu tiên như VLOOKUP.
- Không bị ảnh hưởng khi thêm/xóa cột: Vì bạn chỉ định tên cột cụ thể, không dùng số thứ tự.
- Nhanh hơn VLOOKUP với dữ liệu lớn: Đặc biệt khi bảng có hơn 10.000 dòng.
- Kết hợp được nhiều điều kiện: Bằng cách nhân các điều kiện với nhau trong MATCH.
Nhược Điểm Của INDEX/MATCH
- Cú pháp phức tạp hơn VLOOKUP: Hai hàm lồng nhau, người mới học dễ nhầm lẫn.
- Không có fallback tích hợp: Vẫn cần IFERROR khi không tìm thấy.
- Công thức nhiều điều kiện cần Ctrl+Shift+Enter: Dễ quên, gây lỗi sai.
XLOOKUP — Hàm Tra Cứu Thế Hệ Mới (Google Sheets 2023+)
XLOOKUP được Google Sheets hỗ trợ từ năm 2023 và là câu trả lời chính thức cho mọi hạn chế của VLOOKUP. Hàm này kết hợp sự đơn giản của VLOOKUP với sức mạnh của INDEX/MATCH, đồng thời thêm nhiều tính năng mới mà cả hai hàm kia không có.
Cú Pháp XLOOKUP
=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
Các tham số:
- lookup_value: Giá trị cần tìm.
- lookup_array: Cột (hoặc hàng) chứa các giá trị để so khớp.
- return_array: Cột (hoặc vùng) cần trả về.
- [if_not_found]: Giá trị fallback khi không tìm thấy — không cần IFERROR nữa.
- [match_mode]:
0= khớp chính xác (mặc định);1= lớn hơn tiếp theo;-1= nhỏ hơn tiếp theo;2= wildcard. - [search_mode]:
1= từ đầu đến cuối (mặc định);-1= từ cuối lên đầu;2= binary search tăng dần;-2= binary search giảm dần.
Ví Dụ 1: Tra Cứu Cơ Bản — Đơn Giản Hơn Nhiều
Cùng bài toán tìm tên SP theo mã, XLOOKUP viết gọn hơn đáng kể:
=XLOOKUP(A2, E:E, F:F)
Không cần số thứ tự cột, không cần khóa vùng phức tạp — chỉ cần chỉ rõ cột tìm (E) và cột trả về (F).
Ví Dụ 2: Tích Hợp Fallback Value
Thay thế hoàn toàn IFERROR — fallback được tích hợp sẵn trong tham số thứ 4:
=XLOOKUP(A2, E:E, F:F, "Không tìm thấy")
Ví Dụ 3: Tìm Từ Cuối Lên Đầu
Khi dữ liệu có nhiều hàng trùng khớp và bạn muốn lấy hàng mới nhất (giả sử dữ liệu được nhập theo thứ tự thời gian, hàng mới nhất ở dưới cùng):
=XLOOKUP(A2, E:E, F:F, "Không tìm thấy", 0, -1)
Tham số -1 ở cuối = tìm từ dưới lên trên, trả về kết quả khớp đầu tiên từ cuối.
Ví Dụ 4: Trả Về Nhiều Cột Cùng Lúc
Một trong những tính năng độc đáo nhất của XLOOKUP — trả về nhiều cột chỉ với một công thức:
=XLOOKUP(A2, E:E, F:H)
Công thức này trả về đồng thời cả ba cột F, G và H tương ứng với mã tìm được. Kết quả tự động tràn sang các ô bên phải (spill). Đây là tính năng mà VLOOKUP và INDEX/MATCH đơn lẻ không làm được.
Ví Dụ 5: Tìm Kiếm Wildcard
Tìm hàng chứa "Hà Nội" ở bất kỳ vị trí nào trong chuỗi — dùng ký tự * làm wildcard và match_mode = 2:
=XLOOKUP("*Hà Nội*", E:E, F:F, "Không tìm thấy", 2)
Tính năng wildcard này đặc biệt hữu ích khi dữ liệu không chuẩn hóa, tên địa điểm có thể được viết theo nhiều cách khác nhau.
Ưu Điểm Của XLOOKUP
- Cú pháp gọn, dễ đọc hơn INDEX/MATCH: Cùng sức mạnh nhưng viết một hàm thay vì hai hàm lồng nhau.
- Fallback tích hợp sẵn: Không cần bọc IFERROR.
- Tìm ngược chiều: Tìm từ cuối lên đầu chỉ cần thay đổi một tham số.
- Trả về nhiều cột cùng lúc: Với công thức spill, tiết kiệm đáng kể số lượng công thức.
- Hỗ trợ wildcard: Tìm kiếm linh hoạt với ký tự đại diện.
- Không cần Ctrl+Shift+Enter: Khác với INDEX/MATCH khi làm mảng.
Nhược Điểm Của XLOOKUP
- Chỉ hoạt động trên Google Sheets 2023 trở lên: File dùng XLOOKUP không tương thích với Sheets phiên bản cũ hay Excel phiên bản cũ.
- Ít người biết hơn: Nếu chia sẻ file cho người không quen với hàm này, họ có thể không hiểu công thức.
- Tính năng spill (tràn nhiều cột) cần cẩn thận: Nếu ô bên phải đã có dữ liệu, XLOOKUP sẽ báo lỗi
#SPILL!.
Bảng So Sánh 10 Tiêu Chí
| Tiêu Chí | VLOOKUP | INDEX/MATCH | XLOOKUP |
|---|---|---|---|
| Dễ học | ⭐⭐⭐ Dễ nhất | ⭐⭐ Trung bình | ⭐⭐⭐ Dễ |
| Tìm ngược (phải → trái) | ❌ Không | ✅ Có | ✅ Có |
| Nhiều điều kiện | ❌ Không hỗ trợ | ✅ Có (array formula) | ✅ Có thể |
| An toàn khi thêm/xóa cột | ❌ Bị ảnh hưởng | ✅ An toàn | ✅ An toàn |
| Fallback value tích hợp | ❌ Cần IFERROR | ❌ Cần IFERROR | ✅ Built-in |
| Trả về nhiều cột | ❌ Không | ✅ Được (phức tạp) | ✅ Dễ dàng (spill) |
| Tìm kiếm wildcard | ❌ Không | ❌ Không | ✅ Có |
| Hiệu năng dữ liệu lớn | 🐢 Chậm hơn | 🚀 Nhanh | 🚀 Nhanh |
| Tương thích Sheets cũ | ✅ Mọi phiên bản | ✅ Mọi phiên bản | ⚠️ Chỉ từ 2023+ |
| Mức độ phổ biến | ⭐⭐⭐ Rất phổ biến | ⭐⭐ Phổ biến | ⭐ Đang tăng dần |
Ví Dụ Thực Tế: So Sánh Ba Hàm Cùng Một Bài Toán
Bài toán: Cho bảng sản phẩm với cột D = Mã SP, cột E = Tên SP, cột F = Giá bán. Tìm giá bán của sản phẩm có mã ở ô A2.
Cách 1: VLOOKUP
=VLOOKUP(A2, $D$2:$F$100, 3, 0)
Con số 3 = cột thứ 3 trong vùng D:F, tức là cột F (Giá bán). Nếu ai đó chèn thêm cột vào giữa D và F, con số 3 sẽ sai.
Cách 2: INDEX/MATCH
=INDEX($F$2:$F$100, MATCH(A2, $D$2:$D$100, 0))
Chỉ định trực tiếp cột F cho INDEX — an toàn khi cấu trúc bảng thay đổi. Dài hơn nhưng bền hơn.
Cách 3: XLOOKUP
=XLOOKUP(A2, D:D, F:F, "Không có")
Ngắn gọn nhất, fallback tích hợp sẵn, an toàn với thay đổi cột, không cần khóa vùng thủ công.
Khi Nào Dùng Hàm Nào?
Dùng VLOOKUP khi:
- File cần tương thích với người dùng dùng Excel cũ hoặc Google Sheets phiên bản cũ.
- Bảng dữ liệu đơn giản, không có kế hoạch thay đổi cấu trúc cột.
- Đang training nhân viên mới — VLOOKUP dễ giải thích hơn.
- Bảng nhỏ dưới 5.000 dòng, hiệu năng không phải vấn đề.
Dùng INDEX/MATCH khi:
- Cần tra cứu ngược — giá trị tìm kiếm nằm ở cột bên phải cột trả về.
- Bảng dữ liệu hay bị thêm/xóa cột — INDEX/MATCH không bị ảnh hưởng.
- Cần kết hợp nhiều điều kiện tra cứu (array formula).
- Dữ liệu lớn trên 10.000 dòng — INDEX/MATCH nhanh hơn đáng kể.
- Cần tương thích với tất cả phiên bản nhưng vẫn muốn sức mạnh hơn VLOOKUP.
Dùng XLOOKUP khi:
- Bạn đang dùng Google Sheets phiên bản 2023 trở lên và không cần tương thích ngược.
- Muốn code ngắn gọn, dễ đọc — XLOOKUP gọn hơn INDEX/MATCH mà vẫn mạnh bằng.
- Cần tích hợp fallback mà không muốn bọc thêm IFERROR.
- Cần trả về nhiều cột cùng lúc với spill.
- Cần wildcard search hoặc tìm từ cuối lên đầu.
- Bắt đầu dự án mới — dùng XLOOKUP từ đầu là lựa chọn tốt nhất cho 2026.
Lỗi Thường Gặp Và Cách Xử Lý
Lỗi #N/A — Không Tìm Thấy
Xuất hiện khi giá trị cần tìm không có trong bảng. Cách xử lý:
-- VLOOKUP hoặc INDEX/MATCH:
=IFERROR(VLOOKUP(A2, $E$2:$G$100, 2, 0), "Không tìm thấy")
-- XLOOKUP: dùng tham số thứ 4:
=XLOOKUP(A2, E:E, F:F, "Không tìm thấy")
Nguyên nhân phổ biến khác: khoảng trắng thừa trong dữ liệu (dùng TRIM để xử lý), khác kiểu dữ liệu (ô một bên là text, bên kia là number).
Lỗi #REF! — Chỉ Số Cột Vượt Giới Hạn
Xảy ra với VLOOKUP khi col_index_num lớn hơn số cột trong table_array. Ví dụ: bảng chỉ có 3 cột nhưng bạn nhập col_index_num = 4. Giải pháp: đếm lại số cột trong vùng hoặc chuyển sang INDEX/MATCH để tránh dùng số thứ tự.
Kết Quả Sai — Khớp Gần Đúng Thay Vì Chính Xác
Nguyên nhân phổ biến nhất khi VLOOKUP trả về kết quả sai: quên đặt tham số cuối là 0. Mặc định của VLOOKUP là TRUE (khớp gần đúng) nếu bạn bỏ qua tham số này — và bảng phải được sắp xếp tăng dần để khớp gần đúng hoạt động đúng. Hầu hết trường hợp bạn muốn:
=VLOOKUP(A2, $E$2:$G$100, 2, 0) ← Luôn thêm số 0 ở cuối!
Lỗi #SPILL! — Ô Bên Cạnh Đã Có Dữ Liệu
Chỉ xảy ra với XLOOKUP khi trả về nhiều cột (spill). Nếu ô ngay bên phải đã có nội dung, XLOOKUP không thể tràn ra được. Giải pháp: xóa dữ liệu trong vùng spill hoặc chuyển kết quả sang vị trí khác.
Kết Luận: Chọn Hàm Nào Cho Bạn?
Không có hàm nào "tốt nhất tuyệt đối" — câu trả lời phụ thuộc vào ngữ cảnh của bạn:
- Mới bắt đầu học Google Sheets? → Bắt đầu với VLOOKUP. Học xong thì học INDEX/MATCH.
- Đang dùng Sheets hàng ngày và muốn nâng cấp kỹ năng? → INDEX/MATCH là bước tiếp theo quan trọng nhất. Nó giải quyết được 95% vấn đề VLOOKUP không làm được.
- Bắt đầu dự án mới hoặc Sheets của bạn là 2023+? → Dùng XLOOKUP luôn. Nó gộp cả sức mạnh của INDEX/MATCH vào cú pháp đơn giản hơn, cộng thêm nhiều tính năng độc quyền.
- Duy trì file cũ cần tương thích? → Giữ VLOOKUP hoặc INDEX/MATCH như cũ, không cần đổi.
Thực tế, các chuyên gia Google Sheets thường biết cả ba và chọn hàm phù hợp với từng tình huống cụ thể. Mục tiêu của bài viết này là bạn cũng làm được điều đó — không bị gắn cứng vào một hàm duy nhất vì "tôi chỉ biết VLOOKUP".
Hãy thử áp dụng ngay hôm nay: lấy một file Sheets bạn đang dùng VLOOKUP, thử viết lại bằng XLOOKUP và cảm nhận sự khác biệt về độ gọn gàng và ổn định của công thức.
Tham khảo thêm: VLOOKUP — Google Support | XLOOKUP — Google Support
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Google Workspace Certified, 5+ years experience
Bạn thấy bài viết hữu ích?
Đăng ký nhận thông báo khi có bài viết mới.
