
Hàm VLOOKUP Google Sheet dùng để tìm một giá trị ở cột đầu tiên của bảng dữ liệu, rồi lấy về giá trị nằm cùng dòng ở cột khác — ví dụ có mã sản phẩm thì lấy ra tên hàng và giá bán. Cú pháp cơ bản là =VLOOKUP(giá trị cần tìm, vùng bảng, số thứ tự cột, FALSE), trong đó FALSE nghĩa là chỉ chấp nhận kết quả khớp chính xác. Nếu file của bạn đã dùng được XLOOKUP thì với việc mới nên chọn XLOOKUP vì linh hoạt hơn, nhưng VLOOKUP vẫn phải biết, vì gần như mọi file đang chạy trong doanh nghiệp đều viết bằng nó.
Tôi là Lê Minh Công. Nhiều năm đi triển khai phần mềm quản lý trên nền Google Sheet và AppSheet, tôi thấy VLOOKUP là hàm mà nhân viên kho, bán hàng, kế toán dùng nhiều nhất — và cũng là hàm gây ức chế nhiều nhất khi nó trả về #N/A dù mã rõ ràng có trong bảng. Bài này tôi viết đúng theo thứ tự mà tôi vẫn hướng dẫn trực tiếp: hiểu bản chất, viết đúng công thức, tự sửa lỗi, rồi mới bàn đến chuyện đổi sang XLOOKUP.
Hàm VLOOKUP Google Sheet dùng để làm gì?
VLOOKUP dùng để tra cứu theo mã: bạn có một bảng danh mục chuẩn và một bảng phát sinh hằng ngày, VLOOKUP nối hai bảng đó lại mà không cần gõ tay.
Hãy lấy một tình huống rất quen ở cửa hàng vật tư hoặc kho hàng tiêu dùng. Bạn có trang San_pham là danh mục chuẩn do một người duy nhất quản lý:
| Ma_SP | Ten_SP | Don_vi | Gia_ban |
|---|---|---|---|
| SP001 | Ống nhựa PVC 21 | Cây | 32.000 |
| SP002 | Keo dán ống 100g | Hộp | 45.000 |
| SP003 | Co nối 90 độ | Cái | 6.500 |
Và trang Don_hang là nơi nhân viên bán hàng nhập mỗi ngày, chỉ gõ mã và số lượng:
| Ma_SP | So_luong | Gia_ban |
|---|---|---|
| SP002 | 3 | cần điền tự động |
| SP001 | 10 | cần điền tự động |
Cột Gia_ban ở trang Don_hang chính là chỗ VLOOKUP làm việc. Nhân viên không phải nhớ giá, không gõ sai, và khi bảng giá thay đổi thì chỉ sửa một chỗ duy nhất ở trang danh mục. Đây là nguyên tắc nền tảng của mọi phần mềm quản lý: một thông tin chỉ được nhập ở một nơi, các nơi khác đi tra về.
Cách dùng VLOOKUP trong Google Sheet từng bước
Cách dùng VLOOKUP trong Google Sheet gồm 4 tham số, viết đúng thứ tự là chạy. Với ví dụ trên, tại ô C2 của trang Don_hang bạn gõ:
=VLOOKUP(A2, San_pham!$A$2:$D$200, 4, FALSE)
- A2 — giá trị cần tìm. Ở đây là mã sản phẩm nhân viên vừa gõ.
- San_pham!$A$2:$D$200 — vùng bảng tra cứu. Bắt buộc cột chứa mã (
Ma_SP) phải là cột đầu tiên của vùng. Đây là ràng buộc lớn nhất của VLOOKUP. - 4 — số thứ tự cột cần lấy, đếm từ cột đầu tiên của vùng. Cột A là 1, B là 2, C là 3, D (
Gia_ban) là 4. - FALSE — kiểu dò.
FALSElà khớp chính xác,TRUElà khớp gần đúng.
Vì sao luôn để FALSE khi tra mã? Vì TRUE yêu cầu cột đầu tiên phải được sắp xếp tăng dần, và khi không tìm thấy mã, nó không báo lỗi mà lặng lẽ trả về giá trị gần nhất phía dưới. Nghĩa là bạn gõ nhầm SP0021 và nhận về giá của SP002 — sai mà không ai biết. Trong hơn tám năm làm nghề, các vụ sai số liệu khó truy nhất mà tôi gặp phần lớn đến từ một chữ TRUE bỏ quên. Chỉ dùng TRUE khi bạn cố ý tra theo khoảng, ví dụ bảng bậc thuế hay bảng chiết khấu theo doanh số.
Vì sao phải có dấu $? Dấu $ cố định vùng tra cứu. Nếu viết San_pham!A2:D200 rồi kéo công thức xuống, vùng sẽ trượt thành A3:D201, A4:D202… và những dòng cuối bảng danh mục sẽ bị bỏ rơi. Mẹo nhanh: bôi đen phần vùng trong công thức rồi nhấn F4.
Một cách khác an toàn hơn là lấy nguyên cột: =VLOOKUP(A2, San_pham!$A:$D, 4, FALSE). Cách này không bao giờ thiếu dòng khi danh mục dài thêm, đổi lại hơi nặng hơn nếu file rất lớn.

Tra cứu từ file Google Sheet khác bằng IMPORTRANGE
VLOOKUP chỉ nhìn thấy dữ liệu trong cùng một file. Muốn tra sang file khác, bạn phải lồng IMPORTRANGE vào vị trí vùng bảng:
=VLOOKUP(A2, IMPORTRANGE("ID_hoặc_link_file_danh_mục", "San_pham!A2:D200"), 4, FALSE)
Lần đầu dùng, công thức sẽ báo #REF! kèm nút Cho phép truy cập — bạn phải bấm cấp quyền một lần thì dữ liệu mới chảy sang. Nếu chưa thấy nút, hãy gõ riêng một ô =IMPORTRANGE("link", "San_pham!A1") để kích hoạt cấp quyền, rồi mới ghép vào công thức chính.
Kinh nghiệm của tôi: đừng lồng IMPORTRANGE vào từng dòng VLOOKUP. Mỗi dòng sẽ gọi sang file nguồn một lần, file ì rất nhanh. Thay vào đó hãy tạo một trang trung gian tên DM_SanPham, đặt đúng một công thức IMPORTRANGE ở ô A1 để kéo toàn bộ danh mục về, rồi VLOOKUP trỏ vào trang trung gian đó. Chi tiết về cách lọc dữ liệu khi kéo về, bạn xem thêm bài hàm IMPORTRANGE Google Sheet và cách kết hợp với QUERY.
Sửa các lỗi VLOOKUP hay gặp
Hầu hết lỗi VLOOKUP chỉ thuộc bốn nhóm, và nhóm nào cũng sửa được trong vài phút khi bạn biết nhìn vào đâu.
Lỗi #N/A — không tìm thấy giá trị
#N/A nghĩa là Google Sheet đã dò hết cột đầu tiên mà không thấy giá trị khớp. Các nguyên nhân thật sự, xếp theo tần suất tôi gặp:
- Thừa khoảng trắng. Mã dán từ phần mềm khác hoặc từ Zalo thường dính dấu cách ở cuối.
"SP001 "và"SP001"là hai giá trị khác nhau. Sửa bằng=VLOOKUP(TRIM(A2), San_pham!$A:$D, 4, FALSE), và nên làm sạch luôn cột mã trong danh mục. - Mã dạng số và mã dạng chữ lẫn lộn. Mã
001gõ vào Google Sheet sẽ tự thành số1, trong khi bên danh mục lưu là chữ"001". Hai bên không bao giờ khớp. Cách xử lý triệt để là bôi đen cột mã ở cả hai bảng, vào Định dạng → Số → Văn bản thuần tuý rồi nhập lại. Cách chữa cháy nhanh:=VLOOKUP(TO_TEXT(A2), San_pham!$A:$D, 4, FALSE). - Cột mã không phải cột đầu tiên của vùng. Nếu
Ma_SPnằm ở cột B mà bạn khai vùng từ A, VLOOKUP sẽ đi dò cột A và dĩ nhiên không thấy gì. - Mã thật sự chưa có trong danh mục. Trường hợp này
#N/Alà đúng, và nó đang giúp bạn phát hiện dữ liệu rác.
Để bảng trông sạch, hãy bọc IFERROR: =IFERROR(VLOOKUP(A2, San_pham!$A:$D, 4, FALSE), "Không có mã"). Nhưng xin nhấn mạnh: chỉ bọc sau khi đã hiểu vì sao lỗi. Bọc IFERROR quá sớm là cách nhanh nhất để giấu sai sót đi và phát hiện ra lúc đối chiếu công nợ cuối tháng.
Lỗi #REF! và kết quả sai lệch cột
#REF! trong VLOOKUP thường có nghĩa: số thứ tự cột lớn hơn số cột của vùng. Bạn khai vùng A:C (3 cột) nhưng yêu cầu lấy cột 4. Đếm lại số cột trong vùng là xong.
Nguy hiểm hơn #REF! là trường hợp chèn thêm cột vào giữa bảng danh mục. Giả sử ai đó chèn cột Nhom_hang vào giữa, cột Gia_ban bị đẩy từ vị trí 4 sang 5, nhưng công thức vẫn ghi cứng số 4 — kết quả là cả file lặng lẽ trả về tên nhóm hàng thay vì giá. Không có lỗi đỏ nào hiện ra. Đây chính là điểm yếu cốt lõi của VLOOKUP và là lý do XLOOKUP ra đời.
XLOOKUP Google Sheet: cú pháp và những điểm hơn
XLOOKUP Google Sheet làm đúng việc của VLOOKUP nhưng bạn chỉ ra thẳng cột tra và cột lấy, không phải đếm số thứ tự cột. Cùng ví dụ trên:
=XLOOKUP(A2, San_pham!A:A, San_pham!D:D, "Không có")
Đọc là: tìm giá trị A2 trong cột A của trang San_pham, trả về giá trị tương ứng ở cột D, nếu không tìm thấy thì ghi "Không có". Bốn điểm hơn thấy rõ:
- Tra cứu sang trái được. Cột kết quả có thể nằm bên trái cột tra, điều VLOOKUP không làm được.
- Không phụ thuộc số thứ tự cột. Chèn hay xoá cột giữa bảng, công thức vẫn trỏ đúng.
- Có sẵn giá trị thay thế khi không tìm thấy, không cần bọc IFERROR.
- Tìm được từ dưới lên. Tham số thứ sáu cho phép đổi chiều dò, hữu ích khi bạn muốn lấy lần phát sinh gần nhất — ví dụ giá nhập mới nhất của một mã hàng trong sổ nhập kho.
Mặc định XLOOKUP đã là khớp chính xác, nên bạn không còn nguy cơ quên FALSE. Cú pháp đầy đủ và các tham số mở rộng, bạn nên tra trực tiếp trong danh sách hàm chính thức của Google Sheets vì Google có bổ sung, điều chỉnh theo thời gian.
Nên dùng VLOOKUP hay XLOOKUP?
Câu trả lời ngắn: với công thức viết mới trong Google Sheet, hãy dùng XLOOKUP. Giữ VLOOKUP khi file cần mở bằng Excel đời cũ hoặc khi cả nhóm bạn chỉ quen VLOOKUP. Cả hai đều cho kết quả như nhau, khác nhau ở độ bền khi bảng tính bị sửa và ở việc ai sẽ bảo trì file sau bạn.
| Tiêu chí | VLOOKUP | XLOOKUP |
|---|---|---|
| Tra cứu sang trái | Không | Có |
| Chèn/xoá cột giữa bảng | Dễ sai thầm lặng | Không ảnh hưởng |
| Xử lý khi không tìm thấy | Phải bọc IFERROR | Có sẵn tham số |
| Mặc định kiểu dò | Khớp gần đúng nếu bỏ trống | Khớp chính xác |
| Tìm từ dưới lên | Không | Có |
| Mở bằng Excel đời cũ | Chạy tốt | Có thể không nhận hàm |
| Mức độ quen thuộc của nhân viên | Rất phổ biến | Còn ít người biết |
| Độ dài công thức | Ngắn hơn | Dài hơn một chút |
Tiêu chí cuối bảng quan trọng hơn mọi người nghĩ. Nếu file của bạn do năm người cùng sửa và chỉ mình bạn biết XLOOKUP, thì công thức "hiện đại" lại trở thành chỗ không ai dám đụng. Lúc đó VLOOKUP quen thuộc có khi là lựa chọn đúng hơn.
Còn phương án thứ ba: INDEX/MATCH
Trước khi XLOOKUP xuất hiện, dân văn phòng dùng INDEX kết hợp MATCH để tra sang trái: =INDEX(San_pham!D:D, MATCH(A2, San_pham!A:A, 0)). Cặp hàm này chạy tốt trên cả Google Sheet lẫn mọi phiên bản Excel, nên nếu file phải đi qua nhiều máy khác nhau thì đây là phương án an toàn nhất. Nhược điểm là khó đọc với người mới và không có sẵn giá trị thay thế khi lỗi.
Dùng VLOOKUP cho cả cột với ARRAYFORMULA
ARRAYFORMULA giúp bạn chỉ đặt một công thức duy nhất ở dòng đầu, dữ liệu thêm bao nhiêu dòng cũng tự tính. Tại ô C2 của trang Don_hang:
=ARRAYFORMULA(IF(A2:A="",,VLOOKUP(A2:A, San_pham!A:D, 4, FALSE)))
Phần IF(A2:A="",,…) có vai trò quan trọng: nó để trống những dòng chưa có mã, tránh cả nghìn ô #N/A chạy xuống dưới. Hai dấu phẩy liền nhau là cố ý, nghĩa là "trả về rỗng".
Lợi ích thực tế rất lớn với các file nhập liệu hằng ngày: nhân viên bán hàng chỉ gõ mã và số lượng, không cần kéo công thức, không lỡ tay xoá công thức ở một dòng nào đó. Đặc biệt nếu dữ liệu đổ vào từ Google Biểu mẫu hay từ app AppSheet, công thức kéo tay sẽ không bao giờ theo kịp dòng mới — ARRAYFORMULA là cách duy nhất chạy ổn. Nếu bạn đang dựng file dùng chung cho cả nhóm, bài quản lý công việc bằng Google Sheet có mô tả cách bố trí trang nhập liệu và trang danh mục tách bạch.
Lưu ý khi dữ liệu lớn dần
VLOOKUP rất tiện nhưng có giới hạn rõ ràng khi bảng phình to. Ba điều cần nhớ:
- File chậm khi tra cứu hàng chục nghìn dòng. Mỗi ô VLOOKUP là một lần dò toàn bộ vùng. Vài nghìn dòng thì không sao, nhưng đến vài chục nghìn dòng nhân với vài cột tra cứu thì mở file sẽ phải chờ. Cách giảm tải: khai vùng vừa đủ thay vì cả cột, hạn chế lồng IMPORTRANGE, và với báo cáo tổng hợp thì dùng Pivot Table hoặc QUERY thay vì hàng loạt công thức tra cứu.
- Mã trùng thì chỉ lấy dòng đầu tiên. VLOOKUP dừng ngay khi gặp kết quả khớp đầu tiên từ trên xuống. Nếu danh mục của bạn lỡ có hai dòng cùng mã với hai giá khác nhau, hàm vẫn trả kết quả bình thường — chỉ là sai. Hãy kiểm tra trùng mã trong danh mục định kỳ.
- Chuẩn hoá mã trước khi tra. Thống nhất một quy tắc đặt mã, để cột mã ở định dạng văn bản, không dùng dấu tiếng Việt và khoảng trắng trong mã. Việc này tốn mười phút nhưng tiết kiệm cho bạn hàng chục lần dò lỗi
#N/Avề sau.
Khi danh mục vượt vài chục nghìn dòng và nhiều người cùng nhập, đó thường là dấu hiệu nên chuyển dữ liệu sang một nền tảng có cơ sở dữ liệu thật sự, thay vì cố giữ mọi thứ trong bảng tính.
Tóm tắt và bước tiếp theo
Những điều cần nhớ về hàm VLOOKUP Google Sheet:
- Công thức chuẩn để tra mã lấy giá:
=VLOOKUP(A2, San_pham!$A$2:$D$200, 4, FALSE)— luôn cóFALSE, luôn cố định vùng bằng$. - Cột chứa mã bắt buộc là cột đầu tiên của vùng tra cứu.
#N/Agần như luôn do khoảng trắng thừa hoặc mã số lẫn mã chữ;#REF!do số thứ tự cột vượt quá vùng.- XLOOKUP linh hoạt hơn cho việc mới; VLOOKUP vẫn hợp khi cần tương thích Excel cũ hoặc cả nhóm đã quen; INDEX/MATCH là phương án trung dung.
- Dùng ARRAYFORMULA cho các file nhập liệu phát sinh liên tục.
Việc bạn nên làm ngay: mở file bán hàng hoặc file kho đang dùng, tạo một trang danh mục riêng với cột mã đặt ở ngoài cùng bên trái, rồi viết thử một công thức VLOOKUP cho cột giá. Sau đó cố tình gõ sai một mã để xem lỗi #N/A xuất hiện thế nào — hiểu lỗi quan trọng hơn thuộc cú pháp. Khi đã quen, viết lại chính công thức đó bằng XLOOKUP và tự so sánh.
Đọc tiếp hai bài cùng chủ đề để ghép thành một file hoàn chỉnh: các hàm Google Sheet hay dùng nhất (IF, SUMIF, COUNTIF, SUMIFS) và hàm QUERY Google Sheet với nhiều điều kiện. Tài liệu gốc về cú pháp VLOOKUP luôn có tại trang trợ giúp của Google.
Câu hỏi thường gặp
›Nên dùng VLOOKUP hay XLOOKUP?
Với công thức viết mới trong Google Sheet, nên dùng XLOOKUP vì nó tra cứu được sang trái, không bị sai khi chèn thêm cột và có sẵn giá trị thay thế khi không tìm thấy. Giữ VLOOKUP khi file cần mở bằng Excel phiên bản cũ hoặc khi cả nhóm làm việc chỉ quen VLOOKUP. Cả hai cho kết quả giống nhau, khác nhau ở độ bền khi bảng tính bị chỉnh sửa.
›Vì sao VLOOKUP báo #N/A dù mã có trong bảng?
Phổ biến nhất là hai nguyên nhân: mã bị thừa khoảng trắng do dán từ nơi khác, và mã lưu dạng số ở bảng này nhưng dạng văn bản ở bảng kia (ví dụ 001 và "001"). Thử bọc TRIM hoặc TO_TEXT quanh giá trị cần tìm, đồng thời đưa cột mã ở cả hai bảng về định dạng văn bản thuần tuý. Cũng cần kiểm tra cột chứa mã có đúng là cột đầu tiên của vùng tra cứu hay không.
›VLOOKUP có tra cứu sang trái được không?
Không. VLOOKUP chỉ dò ở cột đầu tiên của vùng và lấy dữ liệu ở các cột bên phải. Muốn lấy dữ liệu nằm bên trái cột chứa mã, bạn dùng XLOOKUP hoặc kết hợp INDEX với MATCH, ví dụ =INDEX(San_pham!D:D, MATCH(A2, San_pham!A:A, 0)).
›Làm sao VLOOKUP lấy dữ liệu từ file Google Sheet khác?
Lồng IMPORTRANGE vào vị trí vùng tra cứu, dạng =VLOOKUP(A2, IMPORTRANGE("link_file", "San_pham!A2:D200"), 4, FALSE), và bấm nút Cho phép truy cập hiện ra ở lần chạy đầu tiên. Tuy nhiên nên tạo một trang trung gian chỉ chứa một công thức IMPORTRANGE để kéo toàn bộ danh mục về, rồi cho VLOOKUP trỏ vào trang đó. Cách này giúp file chạy nhẹ hơn nhiều so với gọi IMPORTRANGE ở từng dòng.
Tác giả
Chuyên gia chuyển đổi số · Đại diện 5F Edu
Hơn 8 năm triển khai và tư vấn chuyển đổi số cho doanh nghiệp vừa và nhỏ: chuẩn hoá quy trình, xây phần mềm quản lý bằng AppSheet và web app, tự động hoá bằng N8N. Người làm kênh YouTube Nghiện AppSheet.



