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