Thân tặng ACE của GPE :Cách Lọc Danh Sách theo số cột tùy ý & các Tạo STT tự động, ko dùng Macros và VBA
công thức trong file đính kèm
BDL =DSHS!$B$2:$E$316
Pos =IF(OFFSET(BDL,,2,,1)=TONGHOP!$E$3,IF((OFFSET(BDL,,,,1)<>"")*(OFFSET(BDL,,,,1)<>0),ROW(INDIRECT("1:"&ROWS(BDL))),""),"")
=IF(ROWS($1:1)>COUNT(Pos),"",ROWS($1:1))
=IF($A5="","",INDEX(BDL,SMALL(Pos,$A5),1))
=IF($A5="","",INDEX(BDL,SMALL(Pos,$A5),2))
=IF($A5="","",INDEX(BDL,SMALL(Pos,$A5),4))
nếu muốn gọn thì xài hàm offset , to khối gán = bdl ctrl+shift+enter là xongFile bạn đã sửa lại nhưng vẫn còn rất dài dòng
Để tôi làm bài này nhé
1> Đặt 2 name
Mã:BDL =DSHS!$B$2:$E$316
2> Công thức tại sheet TONGHOP:Mã:Pos =IF(OFFSET(BDL,,2,,1)=TONGHOP!$E$3,IF((OFFSET(BDL,,,,1)<>"")*(OFFSET(BDL,,,,1)<>0),ROW(INDIRECT("1:"&ROWS(BDL))),""),"")
a) Công thức cho A5:--------------------
b) Công thức cho B5:Mã:=IF(ROWS($1:1)>COUNT(Pos),"",ROWS($1:1))
c) Công thức cho C5:Mã:=IF($A5="","",INDEX(BDL,SMALL(Pos,$A5),1))
d) Công thức cho D5:Mã:=IF($A5="","",INDEX(BDL,SMALL(Pos,$A5),2))
Toàn bộ các công thức đều kéo fill xuống đến dòng 49Mã:=IF($A5="","",INDEX(BDL,SMALL(Pos,$A5),4))
Xong! Bạn thấy đấy: Chỉ 2 name là đủ
Đây là bài toán cơ bản về trích lọc đã post rất nhiều lần trên GPE rồi... Trình tự như sau:
- Đặt name định vị danh sách
- Đặt name điều kiện
- Công thức trích lọc chung 1 kiểu (như bài tôi vừa làm)
Nếu bảng dữ liệu không xếp theo lớp thì sao?nếu muốn gọn thì xài hàm offset , to khối gán = bdl ctrl+shift+enter là xong
lưu ý phải xếp dự liệu theo lớp trước khi thưc hiên
=MATCH(SMALL(IF(DSHS!$D$2:$D$317=TONGHOP!$E$3,ROW(DSHS!$A$2:$A$317),""),ROW(TONGHOP!1:1)),IF(DSHS!$D$2:$D$317=TONGHOP!$E$3,ROW(DSHS!$A$2:$A$317),""),0)
=IF(B5="","",MAX($A$4:A4)+1)
=IFERROR(INDEX(DSHS!$A$2:$E$317,dong,COLUMN()),"")
=IFERROR(INDEX(DSHS!$A$2:$E$317,dong,COLUMN()+1),"")