Menu

Dò tìm nhiều điều kiện trong Excel: XLOOKUP, INDEX MATCH

=XLOOKUP(1,(A2:A7=E2)*(B2:B7=F2),C2:C7) trả về giá trị ở hàng có cột A khớp với E2 và cột B khớp với F2. Kèm theo là cách dùng INDEX MATCH, cột phụ cho VLOOKUP và FILTER để lấy mọi kết quả khớp.

Mọi bảng tính trên trang này đều trực tiếp: đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

=XLOOKUP(1,(A2:A7=E2)*(B2:B7=F2),C2:C7) trả về giá ở hàng có sản phẩm là E2 và cỡ là F2. Mỗi phép so sánh kiểm tra từng hàng, nhân chúng với nhau thì chỉ ra 1 ở hàng mà cả hai đều đúng, và XLOOKUP đi tìm số 1 đó. Cách này cần Excel 2021 hoặc Microsoft 365; phiên bản INDEX MATCH ở bên dưới chạy được trên mọi phiên bản.

Giá theo sản phẩm và cỡ
G2
ABCDEFG
1ProductSizePriceProductSizePrice
2CoffeeSmall$2.50TeaLarge$3.00
3CoffeeLarge$3.50
4TeaSmall$2.00
5TeaLarge$3.00
6JuiceSmall$3.00
7JuiceLarge$4.00
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Tea và Large gặp nhau ở hàng 5, nên G2 trả về 3.00.ChọnJuicevaˋSmall:lạilaˋ3.00. Chọn Juice và Small: lại là 3.00, nhưng lấy từ một hàng khác. Thêm đối số thứ tư cho trường hợp không có hàng nào khớp cả hai: =XLOOKUP(1,(A2:A7=E2)*(B2:B7=F2),C2:C7,"No such item").

Cách các điều kiện nhân với nhau hoạt động

A2:A7=E2 so sánh từng sản phẩm với E2 và trả về sáu giá trị TRUE hoặc FALSE. Nhân hai danh sách như vậy sẽ đổi TRUE thành 1 và FALSE thành 0, và một hàng chỉ bằng 1 khi nó bằng 1 ở cả hai danh sách. Cột D hiện danh sách đó, tràn (spill) ra từ một công thức duy nhất.

Mảng mà XLOOKUP tìm kiếm
D2
ABCDEFG
1ProductSizePriceBoth matchProductSize
2CoffeeSmall$2.500TeaLarge
3CoffeeLarge$3.500
4TeaSmall$2.000
5TeaLarge$3.001
6JuiceSmall$3.000
7JuiceLarge$4.000
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Chỉ D5 bằng 1. Đổi F2 hoặc G2 thì số 1 sẽ chuyển chỗ. Mỗi điều kiện thêm vào là thêm một *(range=value), và điều kiện không nhất thiết phải là so sánh bằng: *(C2:C7<3) thêm điều kiện "giá dưới 3". Mọi vùng phải trải trên cùng các hàng (A2:A7, B2:B7, C2:C7): nếu vùng trả về có kích thước khác với các vùng điều kiện, XLOOKUP trả về #VALUE!.

INDEX MATCH với nhiều điều kiện

Với Excel 2019 trở về trước, MATCH có thể tìm số 1 trong chính mảng đó, rồi INDEX trả về giá ở vị trí tìm được.

Hai điều kiện với INDEX và MATCH
G2
ABCDEFG
1ProductSizePriceProductSizePrice
2CoffeeSmall$2.50CoffeeLarge$3.50
3CoffeeLarge$3.50
4TeaSmall$2.00
5TeaLarge$3.00
6JuiceSmall$3.00
7JuiceLarge$4.00
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Coffee và Large nằm ở vị trí 2 của mảng, và INDEX trả về $3.50. Trong Excel 2019 trở về trước, đây là công thức mảng: nhấn Ctrl+Shift+Enter (trên Mac là Cmd+Shift+Enter) thay vì Enter, và Excel sẽ hiện công thức trong cặp ngoặc nhọn. Chỉ nhấn Enter thì thường nhận về #N/A hoặc #VALUE!. Trong Excel 365, nhấn Enter là đủ. Dạng một điều kiện có ở trang INDEX và MATCH.

Nối các điều kiện thành một khóa

Cách còn lại là gộp hai điều kiện thành một bằng cách nối chúng. VLOOKUP cần các giá trị đã nối nằm trong một cột phụ ở đầu bảng (trang VLOOKUP có hướng dẫn cách này). XLOOKUP có thể nối các vùng ngay trong công thức, nên không cần cột phụ.

Nối sản phẩm và cỡ thành một khóa
G2
ABCDEFG
1ProductSizePriceProductSizePrice
2CoffeeSmall$2.50JuiceLarge$4.00
3CoffeeLarge$3.50
4TeaSmall$2.00
5TeaLarge$3.00
6JuiceSmall$3.00
7JuiceLarge$4.00
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

A2:A7&"|"&B2:B7 tạo ra sáu khóa như Juice|Large, và XLOOKUP tìm Juice|Large trong số đó: $4.00. Hãy đặt ký tự phân cách giữa các phần. Không có nó, "AB" và "C" nối lại thành "ABC" giống hệt "A" và "BC", và phép dò tìm có thể trả về sai hàng.

Nếu giá trị cần lấy là số và mỗi tổ hợp chỉ xuất hiện một lần, SUMIFS cho cùng kết quả mà không cần mảng: =SUMIFS(C2:C7,A2:A7,E2,B2:B7,F2). Hàm trả về 0 thay vì báo lỗi khi không có gì khớp, điều này có thể che mất một lỗi gõ sai.

Lấy mọi kết quả khớp với FILTER

XLOOKUP và INDEX MATCH trả về hàng khớp đầu tiên. Khi có nhiều hàng khớp và bạn muốn lấy hết, hãy dùng FILTER với cùng các điều kiện.

Mọi đơn Phone của vùng North
F2
ABCDEFG
1RegionProductQuarterSalesMatches
2NorthLaptopQ1120Q1210
3NorthPhoneQ1210Q2225
4SouthLaptopQ195Q3240
5NorthPhoneQ2225
6SouthPhoneQ2180
7NorthLaptopQ2135
8NorthPhoneQ3240
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Có ba hàng là North và Phone, nên F2 tràn quý và doanh số của chúng ra F2:G4. Đổi A3 thành South thì danh sách rút xuống còn hai. Nếu không có hàng nào khớp, FILTER trả về #CALC!; đối số thứ ba như "None" sẽ hiện chữ thay thế. Xem thêm các tùy chọn ở trang FILTER.

Luyện tập: ba điều kiện

Doanh số theo vùng, sản phẩm và quý
G4
ABCDEFG
1RegionProductQuarterSalesRegionSouth
2NorthLaptopQ1120ProductLaptop
3NorthLaptopQ2135QuarterQ2
4NorthPhoneQ1210Sales
5SouthLaptopQ195
6SouthPhoneQ2180
7SouthLaptopQ2110
8NorthPhoneQ2225
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đến lượt bạn: Trả về trong G4 doanh số của vùng ở G1, sản phẩm ở G2 và quý ở G3.

Câu hỏi thường gặp

Làm sao dùng XLOOKUP với nhiều điều kiện?

Nhân các phép so sánh, mỗi điều kiện một phép, rồi tìm số 1: =XLOOKUP(1,(A2:A7=E2)*(B2:B7=F2),C2:C7). Mỗi phép so sánh cho TRUE hoặc FALSE ở từng hàng, tích chỉ bằng 1 khi tất cả đều TRUE, và XLOOKUP trả về hàng đầu tiên như vậy.

Làm sao dùng INDEX MATCH với hai điều kiện?

Đặt chính các điều kiện nhân với nhau đó vào trong MATCH: =INDEX(C2:C7,MATCH(1,(A2:A7=E2)*(B2:B7=F2),0)). Trong Excel 2019 trở về trước, xác nhận công thức bằng Ctrl+Shift+Enter (trên Mac là Cmd+Shift+Enter).

VLOOKUP có dùng được hai điều kiện không?

Không trực tiếp. Thêm một cột phụ ở đầu bảng để nối hai giá trị lại, ví dụ =A2&"|"&B2, rồi dò tìm giá trị đã nối: =VLOOKUP(E2&"|"&F2,helper_table,col,FALSE).

SUMIFS có thay được phép dò tìm hai điều kiện không?

Được, khi giá trị cần lấy là số và mỗi tổ hợp chỉ xuất hiện một lần: =SUMIFS(C2:C7,A2:A7,E2,B2:B7,F2). Hàm trả về 0 thay vì #N/A khi không có hàng nào khớp, và cộng dồn các giá trị nếu một tổ hợp xuất hiện hai lần.

Làm sao dò tìm với điều kiện OR?

Cộng các điều kiện thay vì nhân: (A2:A7="Tea")+(A2:A7="Juice") bằng 1 trở lên khi ít nhất một điều kiện đúng. Sau đó tìm giá trị lớn hơn 0, ví dụ =XLOOKUP(TRUE,((A2:A7="Tea")+(A2:A7="Juice"))>0,C2:C7).

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu