Range.AutoFIlter方法可以进行自动筛选,语法结构如下:

Range.AutoFilter(Field,Criteria1Operator,Criteria2,VIsibleDropDown);

参数说明:

Field可选,筛按33选的字段的整型偏移量,;例如筛选A列的字段则取值1,筛选D列的字段则取值4;

Criteria1,可选,字符串类型。筛选条件可以使用“=”,“<”,“>”,“<>”等运算符;

Operator,可选,指定筛选类型。设置为xlAutoFileterOpearator枚举中的常量之一,如下表所示:

名称

说明

xlAnd

条件1和条件2的逻辑与

xlBottom10Items

显示最低值项(条件1中指定的项数)

xlBottom10Percent

显示最低值项(条件1中指定的百分数)

xlFilterCellColor

显示单元格颜色

xlFilterDynamic

动态筛选

xlFilterFontColor

字体颜色

xlFilterIcon

筛选图标

xlFIlterValues

筛选值

xlOr

条件1与条件2的逻辑或

xlTop10Items

显示最高值项(条件1中指定的项数)

xlTop10Percent

显示最高值项(条件1中指定的百分数)

Critera2,可选,第二个筛选条件,与Criteria1和Operator一起组成复合筛选条件;

VIsibleDropDown,可选,如果设置为true,则显示筛选字段的自动筛下拉箭头。

 

下表为例1到例5使用的数据

省份

年份

产量

湖北

2006

20000

广州

2012

12000

广东

2011

23000

山西

2006

8000

江西

2009

7900

湖南

2006

3000

湖北

2013

90002

广东

2007

12090

河南

2008

2230

 

【例1】筛选省份为湖北的数据

Worksheets(1).Select
    If ActiveSheet.AutoFilterMode = False Then  '检查是否开启自动筛选
        Range("A1:B9").AutoFilter   '没有开启的话则开启自动筛选
    End If
   
    ActiveSheet.Range("A1:B9").AutoFilter field:=1, Criteria1:="湖北"

【例2】筛选省份为“湖北”且年份为2013的数据

Worksheets(1).Select
    If ActiveSheet.AutoFilterMode = False Then  '检查是否开启自动筛选
        Range("A:B").AutoFilter   '没有开启的话则开启自动筛选
    End If
   
    ActiveSheet.Range("A:B").AutoFilter field:=1, Criteria1:="湖北"
    ActiveSheet.Range("A:B").AutoFilter field:=2, Criteria1:="2013", Operator:=xlAnd

【例3】筛选省份为“湖北”或“广东”的数据

ActiveSheet.Range("A:B").AutoFilter field:=1, Criteria1:="湖北", Operator:=xlOr, Criteria2:="广东"

【例4】筛选“产量”字段高出平均值的所有记录

ActiveSheet.Range("A1:C10").AutoFilter field:=3, Criteria1:=xlfilteraboveaverage, Operator:=xlfilterdynamic

【例5】筛选“产量”字体设置为红色的记录

ActiveSheet.Range("A1:C10").AutoFilter field:=3, Criteria1:=RGB(255, 0, 0), Operator:=xlfilterfoncolor

 

下表为例6到例8使用的数据

【例6】筛选姓“郑”且姓名为两个字的记录

ActiveSheet.Range("A1:C10").AutoFilter field:=1, Criteria1:="=??", Operator:=xlAnd, Criteria2:="=郑*"

【例7】筛选不姓“郑”且姓名为两个字的记录

ActiveSheet.Range("A1:C10").AutoFilter field:=1, Criteria1:="=??", Operator:=xlAnd, Criteria2:="<>郑*"

【例8】清除筛选条件

ActiveSheet.ShowAllData

注意:ActiveSheet.ShowAllData必须在工作表开启了自动筛选且存在筛选条件时使用,否则会报错.

【例9】使用高级筛选,选出不重复的记录并拷贝到另外一张工作表

Sub test()
    Worksheets("AVIC384").Range("D:D").AdvancedFilter _
    Action:=xlFilterCopy, unique:=True, _
    copyTorange:=Worksheets("tools").Range("H1")
End Sub