Nếu bạn đã quen với VLOOKUP, chắc hẳn đôi lúc sẽ thấy nó “khó chiều”: chỉ dò từ trái sang phải, không tìm được nhiều điều kiện (Có thể làm được nếu sử dụng thêm hàm CHOOSE nhưng cách viết không đơn giản), và dễ lỗi khi chèn cột vào giữa.
Lúc này, bộ đôi INDEX/MATCH chính là giải pháp gọn gàng, linh hoạt và chuyên nghiệp hơn rất nhiều.
1. So sánh hàm VLOOKUP và hàm INDEX MATCH
Thay vì phải chọn cả vùng dữ liệu như VLOOKUP, INDEX/MATCH tách bài toán làm hai phần:
- MATCH dùng để xác định vị trí dòng của giá trị cần tìm trong cột tra cứu.
- INDEX dùng để trả về giá trị tương ứng trong cột kết quả (Dựa vào row_num và col_num)
Giả sử ta có nguồn dữ liệu như hình dưới.
Như bạn thấy để giải quyết bài toán đơn giản như này thì bạn có thể sử dụng VLOOKUP hoặc INDEX MATCH đều được. Tuy nhiên nhiều bạn chắc chắn sẽ nói rằng sử dụng INDEX MATCH sẽ khó khăn hơn vì bạn đang sử dụng kết hợp 2 hàm với nhau. Trong khi VLOOKUP chỉ dùng có 1 hàm thôi.
Vậy giờ giả sử ta thêm 1 cột bất kỳ vào giữa như hình dưới. Vậy thì công thức trên còn đúng nữa hay không?
Như bạn thấy thì kết quả không còn chính xác với hàm VLOOKUP nữa nhưng INDEX MATCH thì vẫn chính xác. Đây chính là 1 trong những điểm yếu chí mạng của hàm VLOOKUP.
Vậy giờ mình muốn thêm cột nhưng kết quả vẫn đúng thì phải viết thế nào. Bạn cùng xem kết quả ở hình dưới nhé.
Như bạn thấy đó là nếu muốn kết quả luôn đúng kể cả khi bạn thêm các cột ở giữa thì bạn phải sử dụng hàm MATCH với tham số col_num. Điều này tự nhiên làm cho việc viết công thức VLOOKUP trở nên phức tạp hơn so với VLOOKUP. Thậm chí số chữ để viết nên công thức cũng dài hơn luôn.
Vậy thì tại sao chúng ta không sử dụng INDEX MATCH ngay từ đầu nhỉ. Thiên biến vạn hoá hơn rất nhiều so với VLOOKUP.
Tiếp theo đây mình sẽ kê thêm 1 ví dụ mà VLOOKUP nếu đi 1 mình cũng bó tay thực hiện. Bạn cùng xem hình bên dưới nhé.
Bạn có thể thấy với INDEX MATCH thì cách viết công thức không thay đổi quá nhiều.
Còn nếu bạn sử dụng VLOOKUP thì bạn phải kết hợp thêm hàm CHOOSE với Logic hơi phức tạp 1 chút (Mình sẽ không ưu tiên bạn sử dụng phương pháp này vì viết vừa dài, vừa khó)
Đây chính là lý do mà mình khuyên các bạn nên sử dụng INDEX MATCH ngay từ bây giờ.
Giờ mình sẽ giải thích công thức ở hình dưới 1 chút để các bạn hiểu cơ bản về INDEX MATCH nhé
Giả sử bạn có bảng nhân viên – phòng ban – lương như hình.
Mục tiêu: gõ tên nhân viên → Excel tự trả về mức lương tương ứng.
Giải thích từng phần
| Thành phần | Ý nghĩa |
|---|---|
INDEX($C$2:$C$9, …) |
Lấy dữ liệu trong cột Lương (C2:C9) |
MATCH(E2, $A$2:$A$9, 0) |
Tìm xem tên trong ô E2 nằm ở vị trí thứ mấy trong cột A2:A9 |
0 |
Nghĩa là tìm chính xác tuyệt đối (không tìm gần đúng) |
🧠 Cách hoạt động thực tế:
Ví dụ: E2 = “Nguyễn Thị Đét”
- MATCH(E2, $A$2:$A$9, 0) → ra 4 (vì tên nằm ở dòng thứ 4 trong vùng A2:A9)
- INDEX($C$2:$C$9, 4) → lấy giá trị dòng thứ 4 trong cột Lương → 18,500,000
✅ Kết quả: 18,500,000
🎯 Ghi nhớ:
MATCH = tìm vị trí dòng, cột bạn muốn
INDEX = lấy giá trị tại dòng, cột đó để lấy ra kết quả
➡️ Kết hợp lại: “Tìm dòng, cột – Lấy kết quả”.
2. Tìm theo nhiều điều kiện với INDEX/MATCH
Giả sử ta có bài toán tìm kiếm 2 điều kiện như hình dưới đây.
Ta sẽ cần tìm ra lương của bạn Nguyễn Văn An làm ở Phòng Kỹ thuật.
Dễ thấy chúng ta có 2 bạn Nguyễn Văn An nhưng 2 bạn làm ở 2 phòng khác nhau. Nếu bạn chỉ sử dụng VLOOKUP thì chắc chắn bạn không thể nào viết được. Ở đây công thức của chúng ta như sau.
Bạn có thể thấy công thức trên có 2 dấu {...} ở 2 đầu. Đây là gì?
Đây chính là ký hiệu công thức mảng trong các phiên bản Excel từ 2019 trở về trước.
Tại sao lại từ 2019 trở về trước mà không phải Excel 2021, Excel Online, Excel 2024, Excel 365 vì từ bản Excel 2021 cho đến phiên bản mới nhất hiện tại là Excel 365 thì Engine mới nhất của Excel đã tự nhận biết được đâu là công thức mảng, đâu là công thức bình thường. Thậm chí để chạy các công thức mảng trên Excel đời mới thì bạn không cần phải ấn Ctrl Shift Enter như từ Excel 2019 trở về trước nữa mà chỉ cần ấn Enter mà thôi. Dưới đây là công thức của mình trên Excel 365.
💡 Giải thích logic công thức INDEX + MATCH (nhiều điều kiện)
=INDEX($D$2:$D$9, MATCH(1, ($A$2:$A$9=F2)*($B$2:$B$9=G2), 0))
| Thành phần | Ý nghĩa |
|---|---|
INDEX($D$2:$D$9, ...) |
Lấy dữ liệu trong cột Lương (D2:D9) |
($A$2:$A$9=F2)*($B$2:$B$9=G2) |
Tạo mảng điều kiện: Tên nhân viên = F2 và Phòng ban = G2 |
MATCH(1, ..., 0) |
Tìm dòng đầu tiên mà cả hai điều kiện đều đúng (tức giá trị nhân bằng 1) |
1 |
Đại diện cho trường hợp “đúng” của tất cả điều kiện |
0 |
Tìm chính xác tuyệt đối, không tìm gần đúng |
➡️ Kết quả: khi F2 = “Nguyễn Văn An” và G2 = “Kỹ thuật” → trả về 18,500,000
📌 Cấu trúc dễ nhớ:
MATCH(1, (Điều kiện 1)*(Điều kiện 2)*...*(Điều kiện n), 0)
→ Chỉ khi cả tất cả điều kiện cùng đúng → kết quả của phép nhân = 1 → MATCH tìm thấy dòng cần lấy.
Bạn có thể Download File đính kèm ngay dưới đây.
please authorize