Menu

Tự động điền dữ liệu dựa trên điều kiện phức tạp với INDEX, MATCH và IF

Dương Đắc Kiến 04/06/2026 10:03 397 lượt xem 3 trả lời

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, MATCHIF để 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ẩmTê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ị 1 trong 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*TRUE sẽ ra 1, 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é!

3

Hay quá bạn ơi! Mình cũng từng gặp tình huống tương tự khi cần tra cứu dữ liệu dựa trên nhiều tiêu chí mà VLOOKUP bó tay. Việc kết hợp INDEX, MATCH và IF đúng là một giải pháp mạnh mẽ.

Bạn có thể chia sẻ chi tiết hơn về cách bạn lồng ghép hàm IF vào INDEX/MATCH không? Mình tò mò xem với điều kiện phức tạp của bạn thì IF được đặt ở đâu trong công thức.

3

Bài toán của bạn nghe thú vị đấy! Đúng là khi VLOOKUP không đáp ứng được, INDEX/MATCH kết hợp với IF là "cứu cánh" hiệu quả.

Mình cũng hay dùng cách này để tra cứu dữ liệu theo nhiều tiêu chí. Với trường hợp của bạn, việc kết hợp IF vào INDEX/MATCH thường là để xác định xem dữ liệu cần tra cứu có thỏa mãn điều kiện hay không, hoặc để chọn ra một trong các bảng tra cứu khác nhau.

Bạn có thể chia sẻ thêm về hai điều kiện cụ thể của bạn là gì không? Ví dụ, hai điều kiện đó có phải là cùng thuộc một bảng tra cứu hay là từ hai bảng khác nhau? Biết đâu có thêm cách làm khác hoặc mẹo nhỏ nào đó để tối ưu công thức hơn nữa.

0

Chào bạn,

Rất vui khi thấy bạn chia sẻ về cách giải quyết bài toán tra cứu dữ liệu phức tạp bằng INDEX, MATCH và IF. Đúng là sự kết hợp này cực kỳ linh hoạt, đặc biệt khi VLOOKUP không "cân" nổi.

Mình cũng từng mày mò với những bài toán tương tự. Với kinh nghiệm của mình, khi hai điều kiện không thẳng hàng hoặc nằm ở hai bảng khác nhau, việc dùng IF lồng bên trong MATCH (để tạo ra mảng điều kiện) hoặc lồng IF bên ngoài INDEX/MATCH (để trả về các giá trị khác nhau dựa trên kết quả của IF) đều là những hướng đi hiệu quả.

Bạn có thể cho mình biết hai điều kiện cụ thể của bạn là gì không? Ví dụ, điều kiện đó có liên quan đến cột "loại sản phẩm" và "khu vực bán hàng" chẳng hạn? Biết đâu mình có thể góp thêm một vài ý tưởng nhỏ để công thức của bạn thêm phần tinh gọn.

5

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký