Chào mọi người,
Dạo gần đây mình có gặp một bài toán khá hay khi làm báo cáo. Cụ thể là mình cần điền một cột dữ liệu dựa trên hai điều kiện khác nhau, mà hai điều kiện này lại không thể dùng VLOOKUP hay HLOOKUP trực tiếp được vì nó phức tạp hơn. Sau một hồi mày mò thì mình đã tìm ra cách kết hợp INDEX, MATCH và IF để giải quyết triệt để.
Tình huống của mình là thế này:
- Mình có một bảng dữ liệu lớn chứa thông tin sản phẩm, bao gồm: Mã sản phẩm, Tên sản phẩm, và Giá bán.
- Mình cần tạo một bảng tổng hợp, nhập Mã sản phẩm và Tên sản phẩm, sau đó muốn Giá bán tự động điền vào dựa trên Mã sản phẩm.
- Tuy nhiên, có một vấn đề là cùng một Mã sản phẩm nhưng lại có thể có nhiều Tên sản phẩm khác nhau (ví dụ do cập nhật tên hoặc có các phiên bản khác nhau), và mình chỉ muốn lấy giá của phiên bản có Tên sản phẩm khớp với tên mình đã nhập.
Công thức mình dùng có dạng như sau:
=INDEX(BảngDữLiệu!$C$2:$C$1000, MATCH(1, (BảngDữLiệu!$A$2:$A$1000=$A2)*(BảngDữLiệu!$B$2:$B$1000=$B2), 0))Giải thích:
BảngDữLiệu!$C$2:$C$1000: Là vùng chứa dữ liệu Giá bán mà mình muốn lấy.MATCH(1, (BảngDữLiệu!$A$2:$A$1000=$A2)*(BảngDữLiệu!$B$2:$B$1000=$B2), 0): Đây là phần cốt lõi. Nó tìm kiếm giá trị1trong một mảng kết quả.(BảngDữLiệu!$A$2:$A$1000=$A2): So sánh Mã sản phẩm trong bảng dữ liệu với ô Mã sản phẩm mình nhập ($A2). Kết quả là mảng TRUE/FALSE.(BảngDữLiệu!$B$2:$B$1000=$B2): So sánh Tên sản phẩm trong bảng dữ liệu với ô Tên sản phẩm mình nhập ($B2). Kết quả là mảng TRUE/FALSE.*: Khi nhân hai mảng TRUE/FALSE,TRUE*TRUEsẽ ra1, còn lại là0. Điều này tương đương với việc hai điều kiện cùng đúng.MATCH(1, ..., 0): Tìm vị trí đầu tiên có giá trị1(tức là cả hai điều kiện đều khớp). Số0ở cuối là để tìm chính xác.
Lưu ý: Đây là công thức mảng, nên sau khi gõ xong, bạn cần nhấn Ctrl + Shift + Enter để xác nhận.
Hy vọng chia sẻ này hữu ích cho các bạn đang gặp tình huống tương tự. Nếu có cách nào khác hay hơn, mọi người chia sẻ thêm nhé!