Bài 16 · THVP

Hàm dò tìm trong Excel

VLOOKUP, HLOOKUP, XLOOKUP, LOOKUP, FILTER, INDEX + MATCH, XMATCH kèm bảng mẫu và bài tập

🎯 Mục tiêu bài học

  • Hiểu nguyên tắc dò tìm và cách cố định vùng dò bằng phím F4.
  • Dùng VLOOKUP dò dọc và HLOOKUP dò ngang để lấy dữ liệu theo mã.
  • Dùng XLOOKUP để tra cứu linh hoạt, tra ngược và xử lý khi không tìm thấy.
  • Dùng LOOKUP xếp bậc chiết khấu, bậc thưởng theo khoảng giá trị.
  • Dùng FILTER lọc ra nhiều dòng thoả một hoặc nhiều điều kiện.
  • Kết hợp INDEX + MATCH để tra cứu mọi hướng, kể cả từ phải sang trái.
  • Dùng XMATCH tìm vị trí và dò từ dưới lên.
  • Hoàn thành 2 bài tập mẫu về phiếu xuất kho và báo cáo bán hàng.

📋 Bảng mẫu để thực hành

Nhập lại bảng mẫu trong Excel, sau đó thực hiện các yêu cầu bên phải.

Bảng danh mục hàng hoá kho A
HàngB — Mã hàngC — Tên hàngD — Nhóm hàngE — Đơn giáF — Số lượng
4SP001Bàn làm việcNội thất1,250,00012
5SP002Ghế xoayNội thất890,00025
6SP003Máy in laserThiết bị3,450,0006
7SP004Kệ sách gỗNội thất1,750,0009
8SP005Máy chiếuThiết bị8,900,0003
9SP006Bàn họp lớnNội thất5,600,0004

🔎 Ghi nhớ nhanh cấu trúc 7 hàm dò tìm

HàmCấu trúcCông dụng
VLOOKUP=VLOOKUP(giá_trị_dò; vùng_bảng; số_cột; 0)Dò dọc theo cột đầu tiên của bảng
HLOOKUP=HLOOKUP(giá_trị_dò; vùng_bảng; số_hàng; 0)Dò ngang theo hàng đầu tiên của bảng
XLOOKUP=XLOOKUP(giá_trị_dò; vùng_dò; vùng_trả_về; [khi_không_thấy])Dò mọi hướng, gọn và an toàn hơn VLOOKUP
LOOKUP=LOOKUP(giá_trị_dò; vùng_dò; vùng_kết_quả)Dò gần đúng theo bậc, vùng dò phải tăng dần
FILTER=FILTER(vùng_dữ_liệu; điều_kiện; [khi_rỗng])Lọc và trả về nhiều dòng thoả điều kiện
INDEX + MATCH=INDEX(vùng_kết_quả; MATCH(giá_trị_dò; vùng_dò; 0))Tra được cả sang trái, linh hoạt nhất
XMATCH=XMATCH(giá_trị_dò; vùng_dò; [kiểu_khớp]; [chiều_dò])Tìm vị trí, dò được từ dưới lên

💡 Dấu ngăn cách đối số là ; hoặc , tuỳ cài đặt máy. Nếu Excel báo lỗi công thức, hãy đổi sang dấu còn lại.

Hướng dẫn chi tiết các hàm dò tìm VLOOKUP, HLOOKUP, XLOOKUP, LOOKUP, FILTER, INDEX + MATCH, XMATCH

Mỗi phần đều nêu cấu trúc hàm, cách sử dụng từng bước và ảnh minh hoạ thực tế trong Excel.

1

Hàm VLOOKUP — dò tìm theo cột

  1. Cấu trúc: =VLOOKUP(giá_trị_dò; vùng_bảng; số_thứ_tự_cột; kiểu_dò). Công dụng: lấy dữ liệu ở các cột bên phải dựa vào mã ở cột đầu tiên.
  2. Nhập mã cần tra vào ô I4, ví dụ SP003.
  3. Nhấn vào ô kết quả J4, gõ =VLOOKUP( rồi nhấn chuột vào ô I4.
  4. Gõ ; rồi quét chọn vùng bảng B4:F9 và nhấn F4 để cố định thành $B$4:$F$9.
  5. Gõ ; rồi nhập số thứ tự cột cần lấy — cột Tên hàng là cột thứ 2 tính từ cột B.
  6. Gõ ; rồi nhập 0 (dò chính xác), đóng ngoặc ) và nhấn Enter.
  7. Kéo Fill Handle xuống hoặc sang để tra thêm các cột khác, chỉ đổi số thứ tự cột.
  8. Bọc IFNA để bảng đẹp hơn: =IFNA(VLOOKUP(I4;$B$4:$F$9;2;0);"Không tìm thấy").

💡 Quy tắc vàng: cột chứa mã bắt buộc phải là cột ĐẦU TIÊN của vùng bảng, nếu không VLOOKUP luôn báo #N/A.

Excel với công thức VLOOKUP tra tên hàng từ mã hàng trong bảng danh mục
Hình 1: Hàm VLOOKUP — dò tìm theo cột
2

Hàm HLOOKUP — dò tìm theo hàng

  1. Cấu trúc: =HLOOKUP(giá_trị_dò; vùng_bảng; số_thứ_tự_hàng; kiểu_dò). Công dụng: giống VLOOKUP nhưng dò theo hàng ngang.
  2. Dùng khi bảng tra được trình bày nằm ngang, ví dụ hàng 3 là mã hàng, các hàng dưới là Tên hàng, Nhóm hàng, Đơn giá.
  3. Nhấn ô kết quả, gõ =HLOOKUP( rồi nhấn ô chứa mã cần tra.
  4. Gõ ; rồi quét vùng bảng ngang (bao gồm cả hàng chứa mã) và nhấn F4 để cố định.
  5. Gõ ; rồi nhập số thứ tự HÀNG cần lấy, tính từ hàng đầu tiên của vùng.
  6. Gõ ; rồi nhập 0, đóng ngoặc ) và nhấn Enter.
  7. Kéo Fill Handle sang ngang để tra cho các mã còn lại.
  8. Nếu bảng nằm dọc mà lỡ dùng HLOOKUP sẽ ra #N/A — hãy đổi lại thành VLOOKUP.

💡 Mẹo nhớ: chữ V là Vertical (dọc), chữ H là Horizontal (ngang).

Excel với công thức HLOOKUP dò theo hàng đầu tiên của bảng ngang
Hình 2: Hàm HLOOKUP — dò tìm theo hàng
3

Hàm XLOOKUP — bản nâng cấp của VLOOKUP

  1. Cấu trúc: =XLOOKUP(giá_trị_dò; vùng_dò; vùng_trả_về; [khi_không_thấy]; [kiểu_khớp]; [chiều_dò]).
  2. Nhấn ô kết quả, gõ =XLOOKUP( rồi nhấn ô I4 chứa mã cần tra.
  3. Gõ ; rồi quét vùng dò $B$4:$B$9 (cột Mã hàng), nhấn F4 để cố định.
  4. Gõ ; rồi quét vùng trả về $C$4:$C$9 (cột Tên hàng) và cố định bằng F4.
  5. Gõ ; rồi nhập "Không tìm thấy" để thay cho lỗi #N/A, đóng ngoặc ) và nhấn Enter.
  6. Ưu điểm: không cần đếm số cột, tra được cả sang TRÁI, mặc định là dò chính xác.
  7. Trả về nhiều cột cùng lúc: chọn vùng trả về là $C$4:$E$9, kết quả sẽ tự tràn ra các ô bên cạnh.
  8. Dò từ dưới lên (lấy giao dịch mới nhất): thêm đối số cuối là -1.

💡 XLOOKUP chỉ có trên Microsoft 365 và Excel 2021 trở lên. Máy Excel 2019 hãy dùng INDEX + MATCH thay thế.

Excel 365 với công thức XLOOKUP có sẵn thông báo Không tìm thấy
Hình 3: Hàm XLOOKUP — bản nâng cấp của VLOOKUP
4

Hàm LOOKUP — dò gần đúng theo bậc

  1. Cấu trúc: =LOOKUP(giá_trị_dò; vùng_dò; vùng_kết_quả). Công dụng: xếp bậc, xếp loại theo khoảng giá trị.
  2. Tạo bảng bậc phụ, ví dụ: 0 → 0%, 5 → 3%, 10 → 5%, 20 → 8%. Cột mốc bắt buộc phải sắp xếp TĂNG DẦN.
  3. Nhấn ô kết quả, gõ =LOOKUP( rồi nhấn ô F4 chứa Số lượng.
  4. Gõ ; rồi quét cột mốc và nhấn F4 để cố định.
  5. Gõ ; rồi quét cột kết quả tương ứng, cố định bằng F4, đóng ngoặc ) và nhấn Enter.
  6. Có thể viết gọn bằng hằng mảng: =LOOKUP(F4;{0;5;10;20};{"0%";"3%";"5%";"8%"}).
  7. Kéo Fill Handle xuống hết cột để xếp bậc cho toàn bộ danh sách.
  8. Lỗi hay gặp: mốc sắp xếp lộn xộn → kết quả sai mà không báo lỗi, nên luôn sắp xếp tăng dần trước.

💡 Có thể thay bằng VLOOKUP dò gần đúng: =VLOOKUP(F4;$H$4:$I$7;2;1) — đối số cuối là 1 (TRUE).

Excel với công thức LOOKUP xếp bậc chiết khấu theo số lượng
Hình 4: Hàm LOOKUP — dò gần đúng theo bậc
5

Hàm FILTER — lọc ra nhiều dòng cùng lúc

  1. Cấu trúc: =FILTER(vùng_dữ_liệu; điều_kiện; [giá_trị_khi_rỗng]). Công dụng: trả về TẤT CẢ các dòng thoả điều kiện.
  2. Nhấn vào một ô trống rộng rãi (bên dưới hoặc bên phải bảng) vì kết quả sẽ tràn ra nhiều dòng.
  3. Gõ =FILTER( rồi quét vùng dữ liệu $B$4:$F$9.
  4. Gõ ; rồi nhập điều kiện, ví dụ $D$4:$D$9="Nội thất".
  5. Gõ ; rồi nhập "Không có dữ liệu", đóng ngoặc ) và nhấn Enter.
  6. Kết quả tự tràn (spill) và được viền xanh — chỉ cần sửa ở ô đầu tiên, không kéo Fill Handle.
  7. Lọc nhiều điều kiện cùng đúng dùng dấu *: =FILTER($B$4:$F$9;($D$4:$D$9="Nội thất")*($E$4:$E$9>1000000)).
  8. Lọc một trong hai điều kiện dùng dấu +: =FILTER($B$4:$F$9;($D$4:$D$9="Nội thất")+($F$4:$F$9>=10)).

💡 Lỗi #SPILL! nghĩa là vùng tràn đang bị ô khác chiếm chỗ — hãy xoá dữ liệu bên dưới hoặc chuyển công thức sang chỗ trống.

Excel 365 với công thức FILTER lọc các mặt hàng thuộc nhóm Nội thất
Hình 5: Hàm FILTER — lọc ra nhiều dòng cùng lúc
6

INDEX + MATCH — cặp đôi tra cứu linh hoạt nhất

  1. Cấu trúc: =INDEX(vùng_kết_quả; MATCH(giá_trị_dò; vùng_dò; 0)). MATCH tìm vị trí dòng, INDEX lấy giá trị tại dòng đó.
  2. Hiểu MATCH trước: =MATCH(I4;$B$4:$B$9;0) trả về số thứ tự dòng chứa mã, ví dụ SP003 cho kết quả 3.
  3. Hiểu INDEX: =INDEX($C$4:$C$9;3) trả về giá trị ở dòng thứ 3 của cột Tên hàng.
  4. Ghép lại: nhấn ô kết quả, gõ =INDEX( rồi quét vùng kết quả $C$4:$C$9 và nhấn F4.
  5. Gõ ; rồi gõ MATCH( , nhấn ô I4, gõ ; quét vùng dò $B$4:$B$9 và nhấn F4.
  6. Gõ ;0 rồi đóng đủ 2 dấu ngoặc )) và nhấn Enter.
  7. Ưu điểm lớn nhất: tra được từ PHẢI sang TRÁI — điều VLOOKUP không làm được.
  8. Tra 2 chiều (giao dòng và cột): =INDEX($C$4:$F$9;MATCH(I4;$B$4:$B$9;0);MATCH(J3;$C$3:$F$3;0)).

💡 INDEX + MATCH chạy trên mọi phiên bản Excel và không bị sai khi chèn thêm cột — nên dùng cho các file dùng lâu dài.

Excel với công thức INDEX kết hợp MATCH tra tên hàng từ mã hàng
Hình 6: INDEX + MATCH — cặp đôi tra cứu linh hoạt nhất
7

Hàm XMATCH — tìm vị trí phiên bản mới

  1. Cấu trúc: =XMATCH(giá_trị_dò; vùng_dò; [kiểu_khớp]; [chiều_dò]). Công dụng: trả về vị trí của giá trị trong danh sách.
  2. Nhấn ô kết quả, gõ =XMATCH( rồi nhấn ô I4 chứa mã cần tìm.
  3. Gõ ; rồi quét vùng dò $B$4:$B$9 và nhấn F4 để cố định, đóng ngoặc ) và nhấn Enter.
  4. Khác MATCH: XMATCH mặc định là dò CHÍNH XÁC nên không cần gõ thêm số 0.
  5. Kiểu khớp: 0 chính xác, -1 lấy giá trị nhỏ hơn gần nhất, 1 lấy giá trị lớn hơn gần nhất, 2 dùng ký tự đại diện * ?.
  6. Chiều dò: để trống là từ trên xuống, nhập -1 để dò từ DƯỚI LÊN — rất hợp để lấy giao dịch mới nhất.
  7. Ghép với INDEX y hệt MATCH: =INDEX($C$4:$C$9;XMATCH(I4;$B$4:$B$9)).
  8. Kiểm tra tồn tại: =IF(ISNUMBER(XMATCH(I4;$B$4:$B$9));"Có trong kho";"Chưa có").

💡 XMATCH chỉ có trên Microsoft 365 / Excel 2021. Máy đời cũ hãy thay bằng MATCH và nhớ thêm đối số 0.

Excel 365 với công thức XMATCH trả về vị trí của mã hàng trong danh sách
Hình 7: Hàm XMATCH — tìm vị trí phiên bản mới

📝 Bài tập mẫu để luyện tập

Hai bài tập dưới đây bao quát cả 7 hàm dò tìm vừa học. Hãy tự làm trước rồi mới mở phần đáp án gợi ý.

1

Bài tập 1 — Phiếu xuất kho tra cứu tự động

Nhập bảng danh mục sau vào Excel (tiêu đề ở hàng 3, dữ liệu từ hàng 4) rồi lập phiếu xuất kho tự động điền thông tin khi gõ mã hàng.

Bảng danh mục hàng hoá (B3:F9)
HàngB — Mã hàngC — Tên hàngD — Nhóm hàngE — Đơn giáF — Tồn kho
4VT001Bút bi Thiên LongVăn phòng phẩm5,000500
5VT002Giấy A4 Double AVăn phòng phẩm78,000120
6TB001Máy tính CasioThiết bị450,00035
7TB002Máy in HPThiết bị3,200,0008
8NT001Bàn học sinhNội thất890,00024
9NT002Ghế nhựaNội thất150,00060
Xem đáp án gợi ý
  • J4: =IFNA(VLOOKUP($I$4;$B$4:$F$9;2;0);"Không tìm thấy")
  • J5: =IFNA(VLOOKUP($I$4;$B$4:$F$9;4;0);0)
  • J6: =XLOOKUP($I$4;$B$4:$B$9;$D$4:$D$9;"Không tìm thấy")
  • J7: =INDEX($F$4:$F$9;MATCH($I$4;$B$4:$B$9;0))
  • J8: =XMATCH($I$4;$B$4:$B$9;0)
  • J9: =IF(J7>0;"Còn hàng";"Hết hàng")
2

Bài tập 2 — Báo cáo bán hàng và lọc dữ liệu

Nhập bảng doanh số sau rồi dùng LOOKUP, FILTER, HLOOKUP và INDEX + MATCH để lập báo cáo.

Bảng doanh số nhân viên quý III (bảng bậc thưởng đặt tại L4:M7 gồm 0→0%, 100→2%, 300→5%, 500→8%)
HàngB — Mã NVC — Họ và tênD — Khu vựcE — Doanh số (triệu)F — Chỉ tiêu
4NV01Nguyễn Thị MaiMiền Bắc520400
5NV02Trần Quốc BảoMiền Nam180200
6NV03Lê Hoàng NamMiền Trung310300
7NV04Phạm Thu HàMiền Bắc95150
8NV05Võ Minh TríMiền Nam460400
9NV06Đỗ Kim NgânMiền Trung275250
Xem đáp án gợi ý
  • G4: =LOOKUP(E4;$L$4:$L$7;$M$4:$M$7)
  • H4: =E4*G4
  • I4: =IF(E4>=F4;"Đạt";"Chưa đạt")
  • K5: =INDEX($C$4:$C$9;MATCH($K$4;$B$4:$B$9;0))
  • K6: =XLOOKUP($K$4;$B$4:$B$9;$D$4:$D$9;"Không tìm thấy")
  • O4: =FILTER($B$4:$F$9;$D$4:$D$9="Miền Bắc";"Không có")
  • O10: =FILTER($B$4:$F$9;($E$4:$E$9>=300)*($E$4:$E$9>=$F$4:$F$9);"Không có")
  • K8: =XMATCH("Miền Nam";$D$4:$D$9;0;-1)

Bài tập thực hành

Tài liệu đang được cập nhật.

ZaloEmail