Chào các anh em trong diễn đàn,
Hôm nay mình muốn chia sẻ một mẹo nhỏ khi làm việc với hàm INDEX và MATCH, đặc biệt là khi bạn muốn lấy ra một mảng kết quả có thể trả về nhiều dòng hoặc nhiều cột. Nhiều lúc chúng ta chỉ quen dùng VLOOKUP hoặc INDEX/MATCH để lấy một ô duy nhất, nhưng đôi khi dữ liệu yêu cầu phức tạp hơn.
Ví dụ, bạn có một bảng dữ liệu bán hàng theo tháng và theo sản phẩm. Bạn muốn lấy ra doanh thu của một sản phẩm cụ thể trong một khoảng thời gian nhất định. Nếu chỉ dùng MATCH thông thường, nó sẽ chỉ trả về vị trí dòng đầu tiên tìm thấy. Để lấy toàn bộ mảng kết quả, chúng ta cần kết hợp thêm một chút.
Giả sử:
- Dữ liệu của bạn nằm trong vùng
A1:D10. - Cột A là tên sản phẩm.
- Cột B là tháng.
- Cột C là doanh thu.
- Bạn muốn tìm doanh thu của sản phẩm 'A' trong tháng '3'.
Công thức cơ bản để tìm một ô duy nhất có thể là:
=INDEX(C1:C10, MATCH(1, (A1:A10="A")*(B1:B10="3"), 0))Đây là công thức mảng, cần bấm Ctrl + Shift + Enter.
Tuy nhiên, nếu bạn muốn lấy nhiều giá trị (ví dụ: tất cả doanh thu của sản phẩm 'A' trong tháng '3' mà có thể có nhiều dòng trùng lặp hoặc bạn muốn lấy theo một tiêu chí khác trả về nhiều dòng/cột), bạn có thể cần điều chỉnh hoặc sử dụng các hàm khác như FILTER (nếu Excel bản mới). Nhưng với INDEX/MATCH, bạn có thể mở rộng bằng cách:
1. Lấy mảng trả về nhiều dòng: Nếu bạn muốn lấy tất cả các dòng thỏa mãn điều kiện, hãy thử dùng FILTER nếu có. Nếu không, bạn có thể dùng một cột phụ hoặc các công thức mảng phức tạp hơn để tạo ra một danh sách các vị trí thỏa mãn, sau đó dùng INDEX để lấy toàn bộ.
2. Lấy mảng trả về nhiều cột: Tương tự, nếu bạn muốn lấy kết quả trải rộng ra nhiều cột, bạn có thể cần xác định số cột cần lấy và điều chỉnh INDEX. Ví dụ, nếu bạn muốn lấy cả doanh thu (cột C) và số lượng (cột D) cho sản phẩm 'A' và tháng '3':
=INDEX(C1:D10, MATCH(1, (A1:A10="A")*(B1:B10="3"), 0), COLUMN(A1:B1))Công thức này cũng cần Ctrl + Shift + Enter và bạn kéo sang phải để lấy đủ cột.
Cách này có thể hơi thủ công và phức tạp. Các phiên bản Excel mới với hàm FILTER sẽ đơn giản hơn rất nhiều. Nhưng nếu bạn đang dùng các phiên bản cũ hơn, đây là một cách để mở rộng khả năng của INDEX/MATCH.
Anh em có cách nào khác hoặc có kinh nghiệm gì với việc xử lý mảng kết quả lớn hơn bằng INDEX/MATCH không, chia sẻ cho mình với nhé!