Google Sheets Cơ Bản Bài 4: VLOOKUP, HLOOKUP Và INDEX-MATCH — Tra Cứu Dữ Liệu Nhanh

📚 Series: Google Sheets Cơ Bản
Bài 4: VLOOKUP, HLOOKUP Và INDEX-MATCH — Tra Cứu Dữ Liệu Nhanh
Làm chủ 3 hàm tra cứu quan trọng nhất trong Google Sheets. Hiểu rõ khi nào dùng VLOOKUP, khi nào INDEX-MATCH mạnh hơn, và cách fix lỗi #N/A phổ biến nhất.
1. Tra Cứu Dữ Liệu Là Gì Và Khi Nào Cần?
Hãy tưởng tượng bạn có 2 bảng dữ liệu:
- Bảng A: Danh sách đơn hàng — có mã sản phẩm nhưng không có tên sản phẩm
- Bảng B: Danh mục sản phẩm — có mã sản phẩm và tên đầy đủ
Bạn muốn tự động điền tên sản phẩm từ Bảng B vào Bảng A dựa trên mã. Đây chính là tra cứu dữ liệu — và VLOOKUP/INDEX-MATCH là công cụ làm điều đó.
Khi nào cần dùng hàm tra cứu?
- ✓ Điền tên khách hàng vào đơn hàng từ danh sách khách hàng
- ✓ Lấy giá sản phẩm từ bảng giá vào hóa đơn
- ✓ Tìm thông tin nhân viên từ mã nhân viên
- ✓ Xếp loại học sinh dựa trên điểm số
- ✓ Kết nối 2 sheet dữ liệu khác nhau
2. VLOOKUP Từng Bước Với Ví Dụ Thực Tế
Cú Pháp VLOOKUP
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
lookup_value : Giá trị cần tìm (ô tham chiếu hoặc text)
table_array : Vùng dữ liệu bảng tra cứu
col_index_num : Số thứ tự cột cần lấy dữ liệu
range_lookup : FALSE = tìm chính xác, TRUE = tìm gần đúng
Ví Dụ: Lấy Giá Sản Phẩm Từ Bảng Giá
Giả sử có bảng đơn hàng (Sheet1) và bảng giá (Sheet2):
| Sheet2: Bảng Giá | Cột A | Cột B | Cột C |
|---|---|---|---|
| Hàng 1 (tiêu đề) | Mã SP | Tên SP | Giá |
| Hàng 2 | SP001 | Phần mềm A | 699,000 |
| Hàng 3 | SP002 | Phần mềm B | 1,299,000 |
Ở Sheet1, ô D2 muốn lấy giá của mã SP trong ô A2:
=VLOOKUP(A2, Sheet2!$A:$C, 3, FALSE)
A2 → Mã sản phẩm cần tìm
Sheet2!$A:$C → Vùng bảng giá (dùng $ để cố định khi kéo công thức)
3 → Lấy dữ liệu cột thứ 3 (cột Giá)
FALSE → Tìm chính xác (luôn dùng FALSE trừ khi tra bảng xếp hạng)
Mẹo quan trọng khi dùng VLOOKUP:
- ✓ Cột tra cứu phải là cột đầu tiên trong table_array
- ✓ Luôn dùng $ để cố định vùng bảng tra cứu (VD: $A$2:$C$100)
- ✓ Dùng FALSE cho tìm kiếm chính xác trong hầu hết trường hợp
- ✓ VLOOKUP chỉ tra cứu từ trái sang phải
Ví Dụ 2: Xếp Loại Học Sinh (range_lookup = TRUE)
Bảng xếp loại (đã sắp xếp tăng dần):
Điểm | Xếp loại
0 | Yếu
5 | Trung Bình
6.5 | Khá
8 | Giỏi
9 | Xuất Sắc
Công thức tại cột Xếp Loại:
=VLOOKUP(B2, $E$2:$F$6, 2, TRUE)
← TRUE: tìm gần đúng (phù hợp cho bảng phân cấp)
3. HLOOKUP Và Khi Nào Dùng Thay VLOOKUP
HLOOKUP (Horizontal Lookup) tra cứu theo hàng ngang thay vì cột dọc như VLOOKUP.
=HLOOKUP(lookup_value, table_array, row_index_num, [range_lookup])
row_index_num : Số thứ tự hàng cần lấy dữ liệu (thay vì cột)
Dùng VLOOKUP khi:
- ✓ Dữ liệu tra cứu xếp theo cột (phổ biến nhất)
- ✓ VD: Danh sách sản phẩm theo hàng, mỗi cột là thuộc tính
- ✓ Bảng có nhiều hàng, ít cột
Dùng HLOOKUP khi:
- ✓ Dữ liệu tra cứu xếp theo hàng (ít phổ biến hơn)
- ✓ VD: Bảng tỷ lệ thưởng theo quý ngang
- ✓ Bảng có ít hàng, nhiều cột
4. INDEX-MATCH: Mạnh Hơn VLOOKUP Ở Điểm Nào?
INDEX-MATCH là sự kết hợp của 2 hàm, nhưng mạnh hơn VLOOKUP đáng kể:
INDEX(array, row_num, [col_num])
→ Trả về giá trị tại vị trí hàng/cột trong mảng
MATCH(lookup_value, lookup_array, [match_type])
→ Trả về VỊ TRÍ (số) của giá trị trong mảng
Kết hợp:
=INDEX(C:C, MATCH(A2, A:A, 0))
→ "Tìm A2 trong cột A, lấy giá trị tương ứng từ cột C"
So Sánh VLOOKUP vs INDEX-MATCH
| Tiêu Chí | VLOOKUP | INDEX-MATCH |
|---|---|---|
| Tra cứu từ phải sang trái | ✗ Không được | ✓ Được |
| Thêm/xóa cột giữa | ✗ Công thức bị sai | ✓ Tự điều chỉnh |
| Tốc độ với dữ liệu lớn | Chậm hơn | Nhanh hơn |
| Dễ học | ✓ Đơn giản hơn | Cần hiểu 2 hàm |
| Tra cứu 2 chiều | ✗ Không trực tiếp | ✓ Dễ dàng |
Ví Dụ INDEX-MATCH: Tra Cứu Từ Phải Sang Trái
Bảng: A=Tên SP | B=Danh mục | C=Mã SP | D=Giá
Tình huống: Biết Mã SP (cột C), muốn lấy Tên SP (cột A)
← VLOOKUP không làm được vì cột A ở BÊN TRÁI cột C
Giải pháp INDEX-MATCH:
=INDEX(A:A, MATCH(F2, C:C, 0))
F2 → Mã SP cần tra cứu
C:C → Tìm mã trong cột C
0 → Tìm chính xác (tương đương FALSE trong VLOOKUP)
A:A → Lấy giá trị từ cột A (Tên SP)
INDEX-MATCH Tra Cứu 2 Chiều (Nâng Cao)
Bảng doanh thu theo nhân viên và tháng:
| T1 | T2 | T3
NV1 | 50M | 60M | 55M
NV2 | 45M | 70M | 80M
Lấy doanh thu của NV2 tháng T2:
=INDEX(B2:D3, MATCH("NV2", A2:A3, 0), MATCH("T2", B1:D1, 0))
→ Kết quả: 70M
5. Bài Tập Thực Hành
Bài tập 1: Lookup Giá Sản Phẩm
Tạo bảng đơn hàng tự động điền giá:
- Tạo Sheet "GiaSP" với cột: Mã SP, Tên SP, Đơn giá (10 sản phẩm bất kỳ)
- Tạo Sheet "DonHang" với cột: STT, Mã SP, Số lượng, Đơn giá, Thành tiền
- Dùng VLOOKUP điền Đơn giá từ Sheet GiaSP vào cột D của DonHang
- Tính Thành tiền = Số lượng × Đơn giá
Bài tập 2: Lookup Tên Khách Hàng Từ Mã
Thực hành INDEX-MATCH với tra cứu 2 chiều:
- Tạo Sheet "KhachHang" với cột: Mã KH, Họ Tên, SĐT, Email
- Tạo Sheet "HoaDon" với cột: Số HĐ, Mã KH, Tên KH (tự động), SĐT (tự động), Ngày
- Dùng INDEX-MATCH điền Tên KH và SĐT tự động khi nhập Mã KH
6. Lỗi #N/A, #REF Và Cách Fix
Lỗi #N/A — Không Tìm Thấy Giá Trị
Nguyên nhân: Giá trị tra cứu không tồn tại trong bảng, hoặc định dạng không khớp (text vs number)
Cách fix 1: Dùng IFERROR để hiển thị thân thiện hơn
=IFERROR(VLOOKUP(A2, Sheet2!$A:$C, 3, FALSE), "Không tìm thấy")
Cách fix 2: Kiểm tra định dạng (đây là lỗi phổ biến nhất!)
=VLOOKUP(TEXT(A2,"0"), Sheet2!$A:$C, 3, FALSE) ← Khi bảng gốc là text
=VLOOKUP(VALUE(A2), Sheet2!$A:$C, 3, FALSE) ← Khi bảng gốc là số
Lỗi #REF — Tham Chiếu Sai
Nguyên nhân: col_index_num lớn hơn số cột trong table_array, hoặc đã xóa cột được tham chiếu
Ví dụ lỗi:
=VLOOKUP(A2, B:C, 5, FALSE) ← table_array chỉ có 2 cột nhưng gọi cột thứ 5
Cách fix: Đảm bảo col_index_num ≤ số cột trong vùng chọn
=VLOOKUP(A2, B:F, 5, FALSE) ← Mở rộng vùng hoặc giảm col_index
Lỗi Do Khoảng Trắng Thừa
Nguyên nhân: Dữ liệu có dấu cách trước/sau (rất phổ biến khi copy paste)
Cách fix: Dùng TRIM để loại khoảng trắng thừa
=VLOOKUP(TRIM(A2), Sheet2!$A:$C, 3, FALSE)
Hoặc dọn sạch toàn bộ cột nguồn:
=TRIM(A2) ← Tạo cột tạm, sau đó paste values đè lên cột gốc
Checklist debug khi VLOOKUP báo #N/A:
- Kiểm tra giá trị tìm kiếm có thực sự tồn tại trong bảng không?
- Kiểm tra định dạng: cả hai có cùng kiểu (text/number) không?
- Kiểm tra khoảng trắng thừa bằng hàm TRIM
- Kiểm tra chữ hoa/thường (VLOOKUP không phân biệt, nhưng nên đồng nhất)
- Kiểm tra cột đầu tiên trong table_array có phải cột tra cứu không
7. Quiz 5 Câu — Kiểm Tra Hiểu Biết
Câu 1: VLOOKUP(A2, B2:D10, 4, FALSE) — lỗi gì sẽ xảy ra?
- A. #N/A — không tìm thấy
- B. #REF! — vì table_array chỉ có 3 cột (B, C, D) nhưng yêu cầu cột thứ 4 ✓
- C. #VALUE! — giá trị sai
- D. Không lỗi
Câu 2: Muốn tra cứu từ phải sang trái, nên dùng hàm nào?
- A. VLOOKUP với số âm
- B. INDEX-MATCH ✓
- C. HLOOKUP
- D. Không thể làm được
Câu 3: Trong MATCH(value, array, 0) — số 0 nghĩa là gì?
- A. Tìm giá trị bằng 0
- B. Tìm giá trị nhỏ nhất
- C. Tìm chính xác (exact match) ✓
- D. Trả về 0 nếu không tìm thấy
Câu 4: IFERROR(VLOOKUP(...), "N/A") — điều này làm gì?
- A. Nếu VLOOKUP lỗi, hiển thị "N/A" thay vì lỗi đỏ ✓
- B. Bỏ qua VLOOKUP nếu có lỗi
- C. Luôn trả về "N/A"
- D. Lỗi cú pháp
Câu 5: VLOOKUP range_lookup=TRUE phù hợp cho tình huống nào?
- A. Tìm tên khách hàng từ mã
- B. Xếp loại học sinh theo thang điểm ✓
- C. Lấy giá sản phẩm từ mã SP
- D. Tìm tên nhân viên từ mã NV
8. Bài Tiếp Theo Trong Series
Bài 5: Tạo Biểu Đồ Chuyên Nghiệp
Bar chart, line chart, pie chart, combo chart — từ dữ liệu thô đến báo cáo trực quan đẹp mắt. Học tips thiết kế biểu đồ chuyên nghiệp mà người xem hiểu ngay.
Học Bài 5 Ngay →Áp Dụng VLOOKUP Vào Quản Lý Kinh Doanh
SheetStore cung cấp templates có sẵn VLOOKUP/INDEX-MATCH cho quản lý bán hàng, kho hàng, nhân sự — chỉ cần nhập dữ liệu là dùng ngay.
📚 Bài Viết Liên Quan
- Template Google Sheets Báo Cáo Bán Hàng Theo Vùng và Đại Lý 2027: Phân Tích Đa Chiều
- Google Sheets Nâng Cao Bài 9: Bảo Mật, Phân Quyền và Chia Sẻ Chuyên Nghiệp
- Google Sheets Nâng Cao Bài 4: Hàm QUERY - Lọc và Phân Tích Dữ Liệu Chuyên Nghiệp
- Template Google Sheets Quản Lý Phòng Khám và Bệnh Viện Nhỏ 2027
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
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.