Chào mọi người, hôm nay mình muốn chia sẻ về một lỗi khá khó chịu mà mình hay gặp khi dùng hàm FILTER, đó là lỗi #SPILL!. Lỗi này thường xuất hiện khi công thức của mình trả về nhiều hơn một kết quả, nhưng lại không đủ chỗ trống để hiển thị tất cả. Đặc biệt, khi mình cố gắng kết hợp FILTER với nhiều điều kiện phức tạp, lỗi này càng dễ xảy ra.
Ví dụ, mình có một bảng dữ liệu bán hàng và muốn lọc ra những đơn hàng của một nhân viên cụ thể trong một khoảng thời gian nhất định, đồng thời chỉ lấy những sản phẩm có doanh thu trên 1 triệu. Công thức của mình có thể trông như thế này:
=FILTER(BangDuLieu, (BangDuLieu[NhanVien] = "Nguyễn Văn A") * (BangDuLieu[NgayDatHang] >= NgayBatDau) * (BangDuLieu[NgayDatHang] 1000000), "Không tìm thấy")Khi gặp lỗi #SPILL!, điều đầu tiên mình kiểm tra là xem có bất kỳ ô nào bị chặn bởi dữ liệu khác trong phạm vi kết quả dự kiến không. Đôi khi chỉ cần xóa bớt dữ liệu lân cận là công thức chạy được.
Tuy nhiên, có những trường hợp nguyên nhân sâu xa hơn. Nếu bạn cần trả về nhiều cột từ hàm FILTER và các cột đó có độ dài khác nhau, hoặc có những ô trống xen kẽ, Excel có thể không phân bổ đủ không gian. Trong tình huống này, thay vì cố gắng ép FILTER trả về toàn bộ bảng, mình thường chia nhỏ yêu cầu:
- Lọc ra các hàng thỏa mãn điều kiện trước.
- Sau đó, sử dụng các hàm như
INDEXhoặc các phép toán mảng khác để trích xuất từng cột cụ thể từ kết quả lọc.
Một cách khác là đảm bảo rằng phạm vi trả về của FILTER là nhất quán. Nếu bạn muốn trả về nhiều cột, hãy đảm bảo rằng bạn đang chọn đúng các cột từ bảng dữ liệu gốc. Ví dụ, thay vì BangDuLieu, bạn có thể chỉ định rõ các cột cần thiết: CHOOSECOLS(BangDuLieu, 1, 3, 5).
Các bạn đã từng gặp lỗi này với FILTER hoặc các hàm mảng động khác chưa? Có cách nào hay hơn để xử lý không, chia sẻ với mình nhé!