Dùng XLOOKUP Với Nhiều Điều Kiện Trong Google Sheets [2026]
Mục lục:
- 1. XLOOKUP với nhiều điều kiện: khi nào cần và tại sao công thức 1 điều kiện không đủ
- 2. Cách 1: Nối chuỗi điều kiện (phương pháp phổ biến nhất)
- 3. Cách 2: Dùng mảng boolean nhân điều kiện (chính xác hơn khi có số hoặc ngày)
- 4. So sánh 2 cách và khi nào chọn cách nào
- 5. Lỗi thường gặp và cách xử lý
- 6. Ứng dụng thực tế: khi XLOOKUP nhiều điều kiện không đủ
- 7. Mẹo nâng cao: kết hợp XLOOKUP nhiều điều kiện với tham số if_not_found
- 8. Câu hỏi thường gặp
XLOOKUP với nhiều điều kiện: khi nào cần và tại sao công thức 1 điều kiện không đủ
XLOOKUP tiêu chuẩn chỉ tra cứu theo 1 điều kiện: cho một giá trị, tìm trong một cột, trả về một cột khác. Vấn đề phát sinh khi dữ liệu thực tế có nhiều bản ghi trùng một phần — ví dụ bảng bán hàng có cùng mã sản phẩm nhưng khác chi nhánh, hoặc bảng lương có cùng tên nhân viên nhưng khác tháng. Lúc này bạn cần XLOOKUP xác định đúng dòng dựa trên tổ hợp 2-3 điều kiện cùng lúc, chứ không chỉ 1 cột khoá.
Ví dụ cụ thể: bảng tồn kho có 500 dòng, cột A là "Mã SP" (lặp lại nhiều lần vì mỗi kho một dòng), cột B là "Kho", cột C là "Số lượng tồn". Nếu chỉ XLOOKUP theo Mã SP, công thức sẽ trả kết quả của dòng đầu tiên khớp — sai với thực tế nếu bạn cần số tồn ở đúng kho cụ thể. Đây là lúc cần kỹ thuật nhiều điều kiện.
Cách 1: Nối chuỗi điều kiện (phương pháp phổ biến nhất)
Đây là cách nhanh và dễ hiểu nhất, phù hợp với hầu hết người dùng không rành công thức mảng. Ý tưởng: nối các cột điều kiện thành 1 chuỗi duy nhất (cả ở vùng tra cứu và giá trị tìm), rồi XLOOKUP như bình thường trên chuỗi ghép đó.
Cú pháp:
=XLOOKUP(D2&"|"&E2, A2:A500&"|"&B2:B500, C2:C500)
Trong đó D2 là Mã SP cần tìm, E2 là Kho cần tìm; A2:A500 là cột Mã SP, B2:B500 là cột Kho trong bảng nguồn. Dấu "|" chỉ để ngăn cách, tránh trường hợp nối "AB"&"C" trùng với "A"&"BC". Công thức này chạy được trên cả Google Sheets và Excel 365, không cần Ctrl+Shift+Enter.
Lưu ý quan trọng: vì A2:A500&"|"&B2:B500 là một phép toán mảng, XLOOKUP sẽ tự động tính theo mảng — không cần bọc ARRAYFORMULA ở ngoài khi dùng trong 1 ô đơn. Nhưng nếu muốn kéo công thức xuống nhiều dòng cùng lúc bằng ARRAYFORMULA (fill toàn cột một lần), cú pháp sẽ khác đi một chút và cần thử nghiệm kỹ vì XLOOKUP kết hợp ARRAYFORMULA đôi khi trả lỗi #N/A hàng loạt nếu định dạng dữ liệu không khớp (số vs text).
Ví dụ thực tế: tra cứu lương theo Tên + Tháng
| Mã | Công thức | Kết quả |
|---|---|---|
| Điều kiện 1 | Tên nhân viên | Nguyễn Văn A |
| Điều kiện 2 | Tháng | 07/2026 |
| Công thức | =XLOOKUP(G2&H2, Data!A:A&Data!B:B, Data!C:C) | 15.500.000 |
Cách 2: Dùng mảng boolean nhân điều kiện (chính xác hơn khi có số hoặc ngày)
Cách nối chuỗi tiềm ẩn rủi ro với dữ liệu ngày tháng hoặc số — vì "1"&"23" có thể trùng với "12"&"3" nếu không cẩn thận với dấu ngăn cách, và định dạng ngày ẩn dưới dạng số serial dễ gây lệch khi nối chuỗi. Cách 2 dùng phép nhân logic (TRUE=1, FALSE=0) để lọc chính xác từng điều kiện độc lập:
=XLOOKUP(1, (A2:A500=D2)*(B2:B500=E2), C2:C500)
Giải thích: (A2:A500=D2) trả về mảng TRUE/FALSE cho từng dòng có khớp Mã SP không; (B2:B500=E2) tương tự với Kho. Nhân 2 mảng này lại, chỉ dòng nào cả 2 điều kiện đều TRUE (1*1=1) mới có giá trị 1. XLOOKUP sau đó tìm giá trị "1" đầu tiên trong mảng kết quả và trả về dòng tương ứng ở cột C.
Cách này an toàn hơn khi có từ 3 điều kiện trở lên, hoặc khi điều kiện là ngày tháng, số tiền — vì so sánh trực tiếp giá trị số/ngày thay vì ép về text. Nhược điểm: công thức khó đọc hơn với người mới, và nếu vùng dữ liệu quá lớn (chục nghìn dòng) tốc độ tính hơi chậm hơn so với cách nối chuỗi.
So sánh 2 cách và khi nào chọn cách nào
| Tiêu chí | Nối chuỗi (Cách 1) | Mảng boolean (Cách 2) |
|---|---|---|
| Độ dễ hiểu | Cao, dễ debug bằng mắt | Trung bình, cần hiểu logic TRUE/FALSE |
| Độ chính xác với ngày/số | Rủi ro nếu không dùng dấu ngăn cách | An toàn, so sánh giá trị gốc |
| Tốc độ với dữ liệu lớn | Nhanh hơn | Chậm hơn một chút |
| Số điều kiện tối đa thực tế | 2-3 (dễ rối nếu nhiều hơn) | 4-5 vẫn ổn |
Với bảng dữ liệu dưới 5.000 dòng và điều kiện chủ yếu là text (mã, tên, danh mục), Cách 1 đủ dùng và dễ bảo trì. Với bảng lớn hơn hoặc có điều kiện ngày/số cần độ chính xác tuyệt đối (như tra cứu công nợ theo khách hàng + kỳ hạn), nên dùng Cách 2.
Lỗi thường gặp và cách xử lý
Lỗi #N/A dù dữ liệu rõ ràng có khớp
Nguyên nhân phổ biến nhất là khoảng trắng thừa hoặc định dạng số/text không đồng nhất (ví dụ mã "001" ở bảng nguồn là text nhưng ô tra cứu nhập là số 1). Dùng TRIM() bọc quanh các điều kiện để loại khoảng trắng: =XLOOKUP(TRIM(D2)&TRIM(E2), TRIM(A2:A500)&TRIM(B2:B500), C2:C500). Nếu vẫn lỗi, kiểm tra định dạng ô bằng hàm ISTEXT/ISNUMBER để xác định gốc vấn đề.
Trả về nhiều kết quả trùng — chỉ lấy được 1 dòng
XLOOKUP mặc định chỉ trả về kết quả khớp đầu tiên tìm thấy. Nếu tổ hợp điều kiện của bạn vẫn còn trùng lặp (ví dụ 2 dòng cùng Mã SP + Kho nhưng khác ngày nhập), cần thêm điều kiện thứ 3 vào chuỗi nối hoặc phép nhân mảng để tách biệt hoàn toàn, hoặc chuyển sang dùng QUERY nếu cần trả về nhiều dòng cùng lúc.
Công thức chạy chậm khi áp dụng cho hàng nghìn dòng
Tránh tham chiếu cả cột (A:A) trong bảng lớn — giới hạn vùng cụ thể (A2:A5000) giúp Google Sheets tính nhanh hơn đáng kể. Nếu bảng có hơn 20.000 dòng và cần tra cứu nhiều điều kiện liên tục, nên cân nhắc chuyển một phần logic sang Apps Script hoặc dùng QUERY với mệnh đề WHERE thay vì XLOOKUP lồng nhiều lớp.
Ứng dụng thực tế: khi XLOOKUP nhiều điều kiện không đủ
Với các bảng theo dõi vận hành thực tế — quản lý dự án theo nhiều giai đoạn, CRM theo dõi khách hàng qua nhiều lần tương tác — XLOOKUP nhiều điều kiện vẫn chỉ là công cụ tra cứu 1-1, không thay thế được cấu trúc dữ liệu quan hệ (relational) đúng nghĩa. Nếu bạn thấy công thức XLOOKUP của mình ngày càng dài, lồng nhiều điều kiện, và khó bảo trì, đó là dấu hiệu nên tách bảng theo mô hình chuẩn hoá hơn — tham khảo cách tổ chức dữ liệu trong bài tạo lịch quản lý dự án trên Google Sheets hoặc xây dựng CRM quản lý khách hàng với Google Sheets, nơi việc tra cứu chéo nhiều điều kiện được thiết kế sẵn trong cấu trúc bảng thay vì chỉ dựa vào công thức đơn lẻ. Các template dựng sẵn trên SheetStore đã xử lý phần này để người dùng không phải tự viết lại công thức mỗi lần thêm điều kiện mới.
Nếu bạn còn phân vân giữa XLOOKUP, VLOOKUP và INDEX/MATCH cho từng tình huống cụ thể, có thể xem thêm bài so sánh chi tiết VLOOKUP vs INDEX/MATCH vs XLOOKUP: chọn hàm nào. Còn khi dữ liệu cần tra cứu nằm ở một file Google Sheets khác thay vì cùng file, cách xử lý IMPORTRANGE kết hợp XLOOKUP được trình bày riêng ở bài dùng XLOOKUP lấy dữ liệu từ sheet khác.
Mẹo nâng cao: kết hợp XLOOKUP nhiều điều kiện với tham số if_not_found
XLOOKUP có tham số thứ 4 (if_not_found) giúp tránh lỗi #N/A tràn lan khi không tìm thấy tổ hợp điều kiện khớp — rất hữu ích khi công thức được kéo xuống hàng trăm dòng mà một số dòng chưa có dữ liệu:
=XLOOKUP(D2&"|"&E2, A2:A500&"|"&B2:B500, C2:C500, "Chưa có dữ liệu")
Với các bảng cần tra cứu 3 điều kiện trở lên (ví dụ: Mã SP + Kho + Tháng), có thể mở rộng chuỗi nối bằng cách thêm điều kiện thứ 3 vào cả 2 vế: =XLOOKUP(D2&"|"&E2&"|"&F2, A2:A500&"|"&B2:B500&"|"&C2:C500, G2:G500). Cấu trúc này mở rộng tốt tới 4-5 điều kiện trước khi công thức trở nên khó đọc và nên cân nhắc chuyển sang QUERY hoặc Apps Script. Để tìm hiểu thêm các kỹ thuật XLOOKUP nâng cao khác kết hợp với ARRAYFORMULA và QUERY, bài Google Sheets nâng cao: XLOOKUP, ARRAYFORMULA, QUERY và 10 thủ thuật bí ẩn có phân tích chi tiết hơn cho các trường hợp phức tạp.
Câu hỏi thường gặp
XLOOKUP có tra cứu được nhiều điều kiện cùng lúc không?
Có. XLOOKUP mặc định chỉ nhận 1 giá trị tra cứu, nhưng bằng cách nối các cột điều kiện thành chuỗi ghép (dùng dấu &) ở cả giá trị tìm và vùng tra cứu, bạn có thể mô phỏng tra cứu nhiều điều kiện mà không cần cột phụ.
Khác gì giữa XLOOKUP nhiều điều kiện và dùng bộ lọc FILTER?
XLOOKUP ghép chuỗi phù hợp khi cần trả về 1 kết quả duy nhất khớp chính xác nhiều điều kiện. FILTER phù hợp hơn khi cần trả về nhiều dòng kết quả cùng thỏa điều kiện. Tùy nhu cầu mà chọn hàm phù hợp.
Vì sao XLOOKUP nhiều điều kiện báo lỗi #N/A dù dữ liệu có vẻ khớp?
Thường do định dạng dữ liệu không khớp (số vs văn bản), khoảng trắng thừa, hoặc thứ tự ghép chuỗi giữa vùng tìm và giá trị tra cứu không đồng nhất. Dùng hàm TRIM và kiểm tra kiểu dữ liệu để khắc phục.
Có thể dùng XLOOKUP nhiều điều kiện thay cho SUMIFS hoặc COUNTIFS không?
Không nên. SUMIFS/COUNTIFS chuyên tính tổng, đếm theo điều kiện. XLOOKUP nhiều điều kiện chỉ dùng để trả về 1 giá trị cụ thể tương ứng, không thực hiện phép tính tổng hợp trên nhiều dòng.
Bài viết liên quan:
Bạn muốn áp dụng ngay mà không phải tự xây từ đầu?
Khám phá các mẫu Google Sheets và phần mềm quản lý dựng sẵn cho doanh nghiệp Việt tại SheetStore Marketplace.
📚 Bài Viết Liên Quan
- Apps Script Từ A Đến Z - Bài 3: Triggers - Tự Động Hóa Theo Sự Kiện
- Google Sheets Nâng Cao Bài 8: Pivot Table và SUMPRODUCT - Phân Tích Dữ Liệu Đa Chiều
- Xu Hướng Google Sheets 2027: AI, Tables & 5 Tính Năng Mới Thay Đổi Cách Làm Việc
- Google Sheets Nâng Cao Bài 4: Hàm QUERY - Lọc và Phân Tích Dữ Liệu Chuyên Nghiệp
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Google Workspace Certified, 5+ years experience
Bạn thấy bài viết hữu ích?
Đăng ký nhận thông báo khi có bài viết mới.


