Menu

Tự động hóa việc tạo danh sách duy nhất theo điều kiện với Google Sheets

Sơn Hùng Triết 11/06/2026 17:50 567 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình có làm việc với Google Sheets nhiều, và nhận thấy một nhu cầu khá phổ biến là làm sao để lấy ra một danh sách duy nhất (unique list) dựa trên một hoặc nhiều điều kiện.

Ví dụ, mình có một bảng dữ liệu bán hàng bao gồm: Ngày, Sản phẩm, Khách hàng, Số lượng, Thành tiền. Bây giờ mình muốn lấy ra danh sách tất cả các Khách hàng đã mua Sản phẩm A trong Tháng 1.

Trước đây, mình hay làm thủ công bằng cách lọc, copy rồi paste vào một sheet khác, sau đó dùng chức năng Remove Duplicates. Tuy nhiên, cách này tốn thời gian và dễ sai sót nếu dữ liệu thay đổi.

Sau khi tìm hiểu, mình phát hiện ra Google Sheets có hàm rất mạnh mẽ để giải quyết vấn đề này mà không cần Apps Script phức tạp, đó là sự kết hợp của FILTERUNIQUE.

Cụ thể, để lấy danh sách khách hàng duy nhất đã mua Sản phẩm A trong Tháng 1, mình sẽ dùng công thức sau:

=UNIQUE(FILTER(TenCotKhachHang, TenCotSanPham="Sản phẩm A", TenCotThang=1))

Trong đó:

  • TenCotKhachHang là cột chứa tên khách hàng.
  • TenCotSanPham là cột chứa tên sản phẩm.
  • TenCotThang là cột chứa tháng (giả sử bạn đã có cột này hoặc có thể trích xuất ra từ cột Ngày).

Hàm FILTER sẽ lọc ra tất cả các dòng thỏa mãn điều kiện về Sản phẩm và Tháng, sau đó hàm UNIQUE sẽ loại bỏ các giá trị trùng lặp, trả về một danh sách duy nhất.

Cách này rất nhanh chóng và tự động cập nhật khi dữ liệu gốc thay đổi. Mọi người thử áp dụng xem sao nhé!

Có ai có cách nào khác hay hơn hoặc gặp khó khăn gì với công thức này thì cùng thảo luận nha!

4

Cách dùng UNIQUEFILTER bạn chia sẻ hay quá! Mình cũng hay phải làm kiểu này.

Ngoài ra, một cách khác cũng khá tiện là dùng QUERY. Với ví dụ của bạn, có thể viết thế này:

=QUERY(DữLiệu!A:D, "SELECT C WHERE B = 'Sản phẩm A' AND MONTH(A) = 1", 0)

Sau đó, bạn có thể áp dụng UNIQUE cho kết quả của QUERY nếu cần:

=UNIQUE(QUERY(DữLiệu!A:D, "SELECT C WHERE B = 'Sản phẩm A' AND MONTH(A) = 1", 0))

QUERY có ưu điểm là linh hoạt hơn khi bạn cần lọc nhiều điều kiện phức tạp hoặc sắp xếp dữ liệu. Bạn thấy sao?

5

Ồ, đúng là một nhu cầu rất thiết thực! Mình cũng từng gặp tình huống tương tự. Thay vì lọc thủ công rồi xóa trùng, bạn thử dùng hàm UNIQUE kết hợp với FILTER xem sao. Ví dụ với trường hợp của bạn, có thể dùng công thức như thế này:

=UNIQUE(FILTER(DữLiệu!C:C, DữLiệu!B:B="Sản phẩm A", MONTH(DữLiệu!A:A)=1))

Ở đây, mình giả định cột Sản phẩm là cột B, cột Ngày là cột A, cột Khách hàng là cột C và dữ liệu của bạn nằm ở sheet tên là "DữLiệu". Hàm FILTER sẽ lấy ra tất cả các khách hàng thỏa mãn điều kiện "Sản phẩm A" và "Tháng 1", sau đó hàm UNIQUE sẽ loại bỏ các giá trị trùng lặp.

Cách này vừa nhanh gọn, lại tự động cập nhật khi dữ liệu thay đổi. Bạn thử xem có hiệu quả không nhé!

1

Hay quá, cảm ơn bạn đã chia sẻ cách dùng QUERY! Mình cũng rất thích QUERY vì sự linh hoạt của nó. Với trường hợp lấy danh sách duy nhất, mình thấy đôi khi UNIQUE(FILTER(...)) cũng xử lý khá nhanh. Tuy nhiên, với các điều kiện phức tạp hơn hoặc khi cần sắp xếp ngay thì QUERY thực sự là "cứu cánh".

Bạn có bao giờ gặp khó khăn khi dùng QUERY với các hàm ngày tháng không? Đôi khi mình loay hoay mãi với cú pháp của nó.

1

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

Đăng nhập Đăng ký