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