Công thức Excel: XLOOKUP với nhiều tiêu chí phức tạp -

Mục lục

Tóm lược

Để tra cứu dữ liệu dựa trên nhiều tiêu chí phức tạp, bạn có thể sử dụng hàm XLOOKUP với nhiều biểu thức dựa trên logic boolean. Trong ví dụ được hiển thị, công thức trong G5 là:

=XLOOKUP(1,(LEFT(B5:B16)="x")*(C5:C16="east")*NOT(MONTH(D5:D16)=4),B5:E16)

Với cài đặt mặc định của XLOOKUP cho chế độ đối sánh (chính xác) và chế độ tìm kiếm (đầu tiên đến cuối cùng), công thức khớp với bản ghi đầu tiên trong đó:

tài khoản bắt đầu bằng "x" VÀ khu vực là "phía đông" và tháng KHÔNG phải là tháng 4.

là bản ghi thứ tư (hàng 8) trong ví dụ được hiển thị.

Giải trình

Thông thường, hàm XLOOKUP được định cấu hình để tìm kiếm giá trị trong mảng tra cứu tồn tại trên trang tính. Tuy nhiên, khi các tiêu chí được sử dụng để so khớp một giá trị trở nên phức tạp hơn, bạn có thể sử dụng logic boolean để tạo nhanh một mảng tra cứu chỉ bao gồm 1 và 0, sau đó tìm kiếm giá trị 1. Đây là cách tiếp cận được sử dụng trong ví dụ này:

=XLOOKUP(1,boolean_array,result_array)

Trong ví dụ này, tiêu chí bắt buộc là:

tài khoản bắt đầu bằng "x" VÀ khu vực là "phía đông" và tháng KHÔNG phải là tháng 4.

Đối với mỗi tiêu chí trong ba tiêu chí riêng biệt ở trên, chúng tôi sử dụng một biểu thức logic riêng. Biểu thức đầu tiên sử dụng hàm LEFT để kiểm tra xem Tài khoản có bắt đầu bằng "x" hay không:

LEFT(B5:B16)="x" // account begins with "x"

Bởi vì chúng tôi đang kiểm tra mười hai giá trị, kết quả là một mảng có mười hai giá trị như sau:

(TRUE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE)

Biểu thức thứ hai kiểm tra xem Vùng là "đông" bằng cách sử dụng toán tử bằng (=):

C5:C16="east" // region is east

Như trước đây, chúng ta nhận được một mảng khác có mười hai giá trị TRUE FALSE:

(FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;TRUE)

Biểu thức thứ ba cần phải loại trừ tháng Tư. Cách dễ nhất để thực hiện việc này là kiểm tra trực tiếp tháng 4 với hàm MONTH:

MONTH(D5:D16)=4 // month is April

Sau đó, sử dụng hàm NOT để đảo ngược kết quả:

NOT(MONTH(D5:D16)=4) // month is not April

tạo một mảng mô tả chính xác "không phải tháng 4":

(FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE)

Tiếp theo, cả ba mảng được nhân với nhau và phép toán buộc các giá trị TRUE và FALSE thành 1s và 0s:

(1;0;1;1;1;0;0;0;1;1;0;1)* (0;0;1;1;1;0;1;0;0;1;0;1)* (0;0;0;1;1;1;1;1;1;1;1;1)

Trong số học boolean, phép nhân hoạt động giống như hàm logic AND, vì vậy kết quả cuối cùng là một mảng duy nhất như sau:

(0;0;0;1;1;0;0;0;0;1;0;1)

Công thức bây giờ có thể được viết lại như sau:

=XLOOKUP(1,(0;0;0;1;1;0;0;0;0;1;0;1),B5:E16)

Với 1 làm giá trị tra cứu và cài đặt mặc định cho chế độ đối sánh (chính xác) và chế độ tìm kiếm (từ đầu đến cuối), XLOOKUP đối sánh với 1 đầu tiên (vị trí thứ tư) và trả về hàng tương ứng trong mảng kết quả, là B8: E8.

Trận đấu cuối cùng

Bằng cách đặt đối số chế độ tìm kiếm tùy chọn thành -1, bạn có thể xác định vị trí "đối sánh cuối cùng" với cùng tiêu chí như sau:

=XLOOKUP(1,(LEFT(B5:B16)="x")*(C5:C16="east")*NOT(MONTH(D5:D16)=4),B5:E16,,,-1)

thú vị bài viết...