VBA知识--数据自动筛选(AutoFilter)

  在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实用很灵活,根据需求指定条件。

上一篇:vba中dir函数用法


下一篇:VBA 指定某列相同的内容合并,对应的其它列内容相加