Lấy điều kiện lọc sau khi AutoFilter (1 người xem)

  • Thread starter Thread starter banhia
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

banhia

Thành viên chính thức
Tham gia
11/10/13
Bài viết
84
Được thích
9
Làm sao để khi lọc đến bộ phận nào thì ô D108 = bộ phận ấy, ô E108 đếm được tổng số người của bộ phận
 

File đính kèm

nhờ các a chị vào giúp mình với ạ!
 
Làm sao để khi lọc đến bộ phận nào thì ô D108 = bộ phận ấy, ô E108 đếm được tổng số người của bộ phận
Mình thì không rành về vba nên mình dùng hàm sau tại ô E108
=IF($D$108="","",COUNTIF($D$6:$D$106,$D$108))
Bạn xem file đính kèm nhe.
 

File đính kèm

Cảm ơn nick Laulemroi nhé, đúng ý của mình rồi đó, nhưng liệu có cách nào chỉ cần dùng công thức excel mà ko cần dùng đến Macro không?
 
Cảm ơn nick Laulemroi nhé, đúng ý của mình rồi đó, nhưng liệu có cách nào chỉ cần dùng công thức excel mà ko cần dùng đến Macro không?

Có!
Mượn file bài 4, tôi dùng công thức sau cho cell D109:
Mã:
=IF(COUNTA(D6:D106)=SUBTOTAL(103,D6:D106),"",INDEX(D6:D106,MATCH(1,SUBTOTAL(103,OFFSET($D$5,,,ROW(INDIRECT("1:"&ROWS(D6:D106))),)),0)))
Công thức mảng, gõ xong phải bấm tổ hợp phím Ctrl + Shift + Enter để kết thúc
Riêng công thức đếm thì quá dễ rồi, khỏi bàn
 

File đính kèm

Bác ndu96081631 dùng công thức hay quá. Bác có thể giải thích cơ chế hoạt động được không ạ.​
 
Bác ndu96081631 dùng công thức hay quá. Bác có thể giải thích cơ chế hoạt động được không ạ.​

Giải thuật chính ở đây là SUBTOTAL. Cứ món nào liên quan đến việc lấy dữ liệu sau khi AutoFilter thì bạn hãy nghĩ đến SUBTOTAL
Để hiểu công thức trên, không gì bằng ta tách chúng ta thành từng đoạn nhỏ mà nghiên cứu. Đầu tiên bạn hãy nghiên cứu đoạn này:
Mã:
SUBTOTAL(103,OFFSET($D$5,,,ROW(INDIRECT("1:"&ROWS(D6:D106))),))
Bôi đen đoạn đó trên thanh Formula rồi nhấn F9 ---> Xem kết quả và tự... suy nghĩ nhé
(giải thích toàn bộ chắc... chết)
 
Quá hay! cảm ơn Thầy NDU nhiều!
 
Giải thuật chính ở đây là SUBTOTAL. Cứ món nào liên quan đến việc lấy dữ liệu sau khi AutoFilter thì bạn hãy nghĩ đến SUBTOTAL
Để hiểu công thức trên, không gì bằng ta tách chúng ta thành từng đoạn nhỏ mà nghiên cứu. Đầu tiên bạn hãy nghiên cứu đoạn này:
Mã:
SUBTOTAL(103,OFFSET($D$5,,,ROW(INDIRECT("1:"&ROWS(D6:D106))),))
Bôi đen đoạn đó trên thanh Formula rồi nhấn F9 ---> Xem kết quả và tự... suy nghĩ nhé
(giải thích toàn bộ chắc... chết)
Nhờ bác xem qua file e gửi, e thay đổi thứ tự dữ liệu trong Range(D6:D106) thì hàm của bác không hiện đúng nữa. Phải chăng là do hàm MATCH?
 

File đính kèm

Nhờ bác xem qua file e gửi, e thay đổi thứ tự dữ liệu trong Range(D6:D106) thì hàm của bác không hiện đúng nữa. Phải chăng là do hàm MATCH?

Xin lỗi, mình gõ nhầm
Công thức cũ:
Mã:
=IF(COUNTA(D6:D106)=SUBTOTAL(103,D6:D106),"",INDEX(D6:D106,MATCH(1,SUBTOTAL(103,OFFSET($D$5[COLOR=#ff0000][SIZE=5],,,[/SIZE][/COLOR]ROW(INDIRECT("1:"&ROWS(D6:D106))),)),0)))
Bạn sửa thành vầy nhé:
Mã:
=IF(COUNTA(D6:D106)=SUBTOTAL(103,D6:D106),"",INDEX(D6:D106,MATCH(1,SUBTOTAL(103,OFFSET($D$5[COLOR=#ff0000][SIZE=5],[/SIZE][/COLOR]ROW(INDIRECT("1:"&ROWS(D6:D106))),)),0)))
3 dấu phẩy sửa thành 1 dấu phẩy
 
Làm sao để khi lọc đến bộ phận nào thì ô D108 = bộ phận ấy, ô E108 đếm được tổng số người của bộ phận

Nếu lọc nhiều mục thì lấy mục cuối cùng, nếu muốn lấy mục đầu thì đổi MAX thành MIN. Ví dụ bạn không chọn 1 mục và cũng không chọn hết mà chọn 2 mục "Hàn Que" và "Vệ Sinh" thì Bộ phận = Vệ Sinh, Tổng = 22
Bộ phận
Mã:
=INDEX($D$6:$D$106;MAX(IF(SUBTOTAL(103;OFFSET($D$5;ROW($1:$101);));ROW($1:$101);"")))

Tổng
Mã:
=COUNTIF($D$6:$D$106;$D$109))
 

Bài viết mới nhất

Back
Top Bottom