在VBA语句中,我们经常需要对满足某些条件的数据进行处理,这个时候我们要用到AutoFilter这个功能。AutoFilter这个函数功能很强大,在数据批量处理中应用非常频繁。AutoFilter函数的语法:Range对象.AutoFilter(Field,Criterial1,Operator,Criteria2,VisibleDropDown)
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
Field | 可选 | Variant | 相对于作为筛选基准字段(从列表左侧开始,最左侧的字段为第一个字段)的字段的整型偏移量。 |
Criteria1 | 可选 | Variant | 条件(字符串;例如,“101”)。 使用 "=" 查找空白字段,使用 "<>" 查找非空白字段,使用 "><" 选择数据类型中的(否数据)字段。如果此参数被省略,条件为“全部”。 如果 Operator 是 xlTop10Items,则 Criteria1 指定项数(例如“10”)。 |
Operator | 可选 | XlAutoFilterOperator | 一个指定筛选器类型的 XlAutoFilterOperator 常量。(XlAutoFilterOperator的选择见具体的链接) |
Criteria2 | 可选 | Variant | 第二个条件(字符串)。 与 Criteria1 和 Operator 一起组合成复合筛选条件。 也用作日期字段的单一条件(按日、月或年筛选)。 后跟一个数组,该数组用于详述和筛选 Array(Level, Date)。 其中,Level 为 0-2(年、月、日),Date 为筛选期内的一个有效日期。 |
SubField | 可选 | Variant | 对其应用条件的数据类型中的字段(例如,来自地理位置的“人口”字段或来自股票的“交易量”字段)。 省略此值目标是“(显示值)”。 |
VisibleDropDown | 可选 | Variant | 如果为 True,则显示已筛选字段的 AutoFilter 下拉箭头。 如果为 False,则隐藏已筛选字段的 AutoFilter 下拉箭头。 默认情况下为 True。 |
实例说明
-
单列单条件筛选
Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=s Selection.CurrentRegion.Select b = [a:a].SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants, 23).Cells.Count - 1
-
多列单条件筛选
Range('B1').AutoFilter Field:=2,Criteria1:='=女' Range('B1').AutoFilter Field:=3,Criteria1:='>=90'B
-
单列多条件的筛选(条件数量 >= 2)
一列的自动筛选只能有两个条件,不过可以允许多个值筛选(Array)ActiveSheet.Range("$A$1:$F$19").AutoFilter Field:=3,Criteria1:=">=80", Operator:=xlAnd,Criteria2:="<90"'两个条件
With sht.Sheets("temp1").Range("a2:o1048576") .AutoFilter field:=1, Criteria1:=Array("M154", "M156", "M158", "M160", "M186"), Operator:=xlFilterValues '大于2个以上的条件采用array进行筛选 .Copy sht.Sheets("temp2").Cells(1, 1) '两个以上的条件选用Array End With
-
高级筛选获得不重复记录
Sheets("Original").Range("a:aj").AdvancedFilter Action:=xlFilterCopy, unique:=True, CopytoRange:=sh.Sheets("Close(M)").Range("a1")
-
取消筛选
sht.Sheets("temp1").AutoFilterMode = False '取消筛选状态
If ActiveSheet.AutoFilterMode = True Then '判断,并取消筛选状态ActiveSheet.AutoFilterMode = False
End If
Autofilter实用很灵活,根据需求指定条件。