Chào các bác, dạo này em hay phải làm báo cáo theo từng nhóm và lọc dữ liệu nhiều. Cái vụ tự động điền STT theo nhóm khi lọc thì em cũng mò được mấy cách rồi, nhưng hôm nay em phát hiện ra một cách dùng SUBTOTAL kết hợp với IF mà thấy khá hay, nó xử lý được cả những trường hợp lọc phức tạp hơn.
Ví dụ, em có một bảng dữ liệu và muốn điền STT theo Mã loại, nhưng chỉ khi dòng đó hiển thị (tức là sau khi lọc). Cách truyền thống dùng IF(SUBTOTAL(3, offset(...))) thì cũng được, nhưng nó chỉ đơn giản là đếm dòng hiển thị.
Nay em thử kết hợp thế này:
=IF(SUBTOTAL(3,OFFSET($A$2,ROW(A1)-ROW($A$2),0)),MAX($B$1:B1)+1,MAX($B$1:B1))Trong đó:
- Cột A là cột điều kiện lọc (ví dụ: Mã loại).
- Cột B là cột STT cần điền.
ROW(A1)-ROW($A$2)tạo ra một dãy số tăng dần từ 0.OFFSET($A$2,ROW(A1)-ROW($A$2),0)tham chiếu đến từng ô trong cột A, bắt đầu từ A2.SUBTOTAL(3, ...)sẽ trả về 1 nếu ô đó hiển thị, 0 nếu ẩn (khi lọc).IF(...)kiểm tra xem dòng hiện tại có hiển thị không.MAX($B$1:B1)+1: Nếu hiển thị, lấy STT lớn nhất của dòng trên cộng 1.MAX($B$1:B1): Nếu ẩn, giữ nguyên STT của dòng trên (để tránh nhảy STT khi lọc).
Cách này em thấy nó linh hoạt hơn, đặc biệt khi kết hợp với các hàm lọc khác. Có bác nào thử cách này chưa ạ? Hoặc có cao kiến nào khác thì chia sẻ cho em học hỏi với ạ!