Menu

Mẹo nhỏ xử lý mảng trả về của hàm FILTER khi có nhiều kết quả

Lạc Mộng Dạ 12/03/2026 19:51 350 lượt xem 3 trả lời

Chào các bạn,

Dạo này mình hay dùng hàm FILTER để lấy dữ liệu theo điều kiện, rất tiện. Tuy nhiên, đôi khi kết quả trả về là một mảng có nhiều dòng và mình muốn xử lý thêm các dòng đó, ví dụ như tính tổng hoặc đếm.

Hàm FILTER trả về một mảng động. Nếu kết quả chỉ có 1 dòng thì không sao, nhưng nếu có nhiều dòng, mình muốn lấy kết quả đó đưa vào một hàm khác như SUM hoặc COUNT thì đôi khi gặp chút rắc rối.

Ví dụ, mình có bảng dữ liệu và muốn lấy tất cả các đơn hàng của tháng 1, sau đó tính tổng giá trị của các đơn hàng đó:

=FILTER(BảngDữLiệu[Giá trị], BảngDữLiệu[Tháng]=1)

Công thức này sẽ trả về một mảng các giá trị tương ứng với tháng 1. Nếu mình muốn tính tổng mảng này, ban đầu mình có thể nghĩ đến việc dùng SUM trực tiếp:

=SUM(FILTER(BảngDữLiệu[Giá trị], BảngDữLiệu[Tháng]=1))

May mắn là Excel phiên bản mới đã hỗ trợ tốt việc này. Tuy nhiên, với một số trường hợp phức tạp hơn hoặc khi bạn làm việc với các phiên bản Excel cũ hơn không hỗ trợ mảng động, bạn có thể cần dùng thêm các hàm khác để

5

Vụ mảng trả về của FILTER đúng là có lúc hơi "khó chiều" thật! Mình cũng từng vật lộn với nó.

Thay vì dùng SUM hay COUNT trực tiếp, bạn thử bọc hàm FILTER trong SUMPRODUCT xem sao. Ví dụ với yêu cầu tính tổng giá đơn hàng tháng 1 của bạn:

``excel =SUMPRODUCT(FILTER(BảngDữLiệu, ThángCủaĐơnHàng="Tháng 1", CộtGiá)) `

Hoặc nếu bạn muốn đếm số đơn hàng tháng 1, có thể dùng:

`excel =ROWS(FILTER(BảngDữLiệu, ThángCủaĐơnHàng="Tháng 1")) `

Hoặc đơn giản hơn:

`excel =COUNT(FILTER(BảngDữLiệu, ThángCủaĐơnHàng="Tháng 1")) ``

Mấy hàm này xử lý mảng trả về của FILTER khá mượt. Không biết bạn đã thử cách này chưa?

5

Chào bạn,

Mình cũng thường xuyên dùng FILTER và gặp tình huống tương tự. Đúng là khi mảng trả về có nhiều kết quả, việc đưa trực tiếp vào SUM hay COUNT đôi khi hơi lúng túng thật.

Cách mình hay làm là dùng hàm BYROW hoặc BYCOL để xử lý từng dòng/cột trong mảng kết quả của FILTER. Ví dụ, nếu bạn muốn tính tổng giá của các đơn hàng tháng 1, sau khi dùng FILTER để lấy ra các đơn đó, bạn có thể dùng:

=SUM(FILTER(BảngDữLiệu, ThángCủaĐơnHàng="Tháng 1", CộtGiá))

Hoặc nếu bạn muốn tính tổng một cột nào đó dựa trên mảng trả về của FILTER, bạn có thể thử:

=SUMPRODUCT(FILTER(...))

Hoặc thậm chí có thể dùng LAMBDA kết hợp với BYROW nếu logic phức tạp hơn.

Không biết bạn đang muốn xử lý cụ thể như thế nào với mảng trả về của FILTER vậy? Chia sẻ thêm để mọi người cùng trao đổi nhé!

2

Chào bạn,

Mình hiểu tình huống bạn đang gặp. Đúng là khi FILTER trả về nhiều kết quả, việc xử lý tiếp có thể hơi rắc rối nếu mình quen với các hàm xử lý đơn lẻ.

Thường thì, mảng động mà FILTER trả về có thể được coi như một mảng thông thường trong các hàm khác. Với trường hợp bạn muốn tính tổng giá của các đơn hàng tháng 1, bạn có thể thử bọc hàm FILTER trong hàm SUM hoặc SUMPRODUCT như sau:

=SUM(FILTER(BảngDữLiệu, ThángCủaĐơnHàng="Tháng 1", CộtGiá))

Hoặc để đếm số lượng đơn hàng tháng 1:

=ROWS(FILTER(BảngDữLiệu, ThángCủaĐơnHàng="Tháng 1"))

Cách này giúp Excel hiểu rằng bạn muốn thực hiện phép tính trên toàn bộ mảng kết quả mà FILTER trả về. Bạn đã thử các hàm tổng hợp như SUM hay ROWS cho mảng kết quả của FILTER chưa?

0

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

Đăng nhập Đăng ký