做Excel数据处理,80%的重复工作都耗在手动筛选、核对、导出数据上!尤其是批量处理报表、清洗数据时,反复点筛选、改条件,费时又容易出错。
今天给大家精讲VBA AutoFilter自动筛选,这是Excel数据自动化的核心功能。语法简单、适配所有办公场景,整理了职场高频实用代码案例,零基础也能直接复制套用,一键搞定数据筛选,大幅提升办公效率。
一、先搞懂:AutoFilter核心基础语法
不用死记复杂参数,只需掌握核心5个参数,就能搞定99%的筛选场景,语法极简易懂:
Range.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)
核心参数释义(超精简):
Field:筛选列序号(从选区第1列开始计数,A列=1、B列=2,以此类推)
Criteria1/Criteria2:筛选条件(文本、数字、日期、区间均可)
Operator:条件运算规则(核心常用:xlAnd且、xlOr或)
VisibleDropDown:是否显示筛选下拉箭头(True显示/False隐藏)
💡 关键小常识:提前设置数据区域,运行代码后,仅展示符合条件的可见行数据,隐藏无效数据,完美替代手动筛选。
二、职场高频实战代码(直接复制可用)
所有案例均适配常规报表(表头在第1行,数据从第2行开始),默认筛选区域A1:D100,可根据自身数据范围随意修改。
1、基础单条件筛选(最常用)
场景:筛选指定列等于固定值的数据,比如筛选B列为“销售部”的所有数据。
Sub 单条件筛选()
'锁定工作表和数据区域,避免报错
With Worksheets("数据报表").Range("A1:D100")
'Field:=2 代表B列,Criteria1为筛选条件
.AutoFilter Field:=2, Criteria1:="船装车间"
End With
End Sub
2、区间条件筛选(数字/日期通用)
场景:筛选数值、日期区间数据,比如筛选C列业绩大于等于5000、小于等于20000的数据。
Sub 区间筛选()
With Worksheets("数据报表").Range("A1:D100")
'xlAnd:同时满足两个条件(区间筛选必备)
.AutoFilter Field:=3, Criteria1:=">=5000", Operator:=xlAnd, Criteria2:="<=20000"
End With
End Sub
3、多条件或筛选(二选一匹配)
场景:满足任意一个条件即可,比如筛选D列岗位为“专员”或“主管”的数据。
Sub 多条件或筛选()
With Worksheets("数据报表").Range("A1:D100")
'xlOr:满足任一条件即展示数据
.AutoFilter Field:=4, Criteria1:="专员", Operator:=xlOr, Criteria2:="主管"
End With
End Sub
4、多列同时筛选(精准定位数据)
场景:双列条件叠加筛选,比如B列=销售部、C列业绩>10000的精准数据。
Sub 多列叠加筛选()
With Worksheets("数据报表").Range("A1:D100")
'依次筛选多列条件,自动叠加生效
.AutoFilter Field:=2, Criteria1:="船装车间"
.AutoFilter Field:=3, Criteria1:=">10000"
End With
End Sub
5、筛选后复制可见数据(办公刚需)
场景:筛选完成后,一键提取可见有效数据,粘贴到新工作表,自动剔除隐藏行,告别手动复制漏数据。
Sub 筛选并提取数据()
Dim sht As Worksheet
Set sht = Worksheets("数据报表")
With sht.Range("A1:D100")
'设置筛选条件
.AutoFilter Field:=2, Criteria1:="船装车间"
'仅复制可见单元格数据
.SpecialCells(xlCellTypeVisible).Copy
End With
'粘贴到新工作表A1单元格
Worksheets.Add.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False '取消复制选区
End Sub
6、一键清除所有筛选(收尾必备)
场景:数据处理完成后,清空所有筛选条件,恢复表格原始状态。
Sub 清除筛选()
'关闭工作表筛选模式,恢复原始数据
Worksheets("数据报表").AutoFilterMode = False
End Sub
三、新手必看:避坑小技巧
工作表名称统一:代码中工作表名称必须和表格底部标签完全一致,中文名称无需加引号,避免报错。
列序号不混乱:Field参数是所选区域内的列序号,不是表格全局列号,以Range选区首列为1开始计数。
区间符号规范:数字、日期筛选必须用英文符号(>=、<=),中文符号会导致筛选失效。
优先清空筛选:批量循环筛选前,建议先执行清除筛选代码,避免多条件叠加混乱。
四、总结
AutoFilter是VBA入门性价比最高的功能,无需复杂逻辑,几行代码就能替代十几分钟的手动操作。日常报表清洗、数据筛选、批量提取数据,用上面的万能代码,直接复制修改参数即可使用,轻松实现Excel数据自动化,彻底告别无效重复劳作!
后续会持续更新VBA批量汇总、数据匹配、报表自动生成等干货,关注我,解锁更多Excel高效办公技巧!