VBA-Range.AutoFilter 方法的一些“坑”
学到筛选的时候遇到一些小小的“坑”,记录下。
- 录制出来的宏是这样的,
Sub 宏1()
' 宏1 宏
Rows("1:1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$F$1048").AutoFilter field:=4, Criteria1:="财务部"
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("财务部").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
-
Criteria1
自己手动写这段代码的时候,Criteria1写成Criterial,一运行就出错了。
查了好久没发现问题,后来上网查才知道,Criteria1后面是阿拉伯数字1!Criteria1后面是阿拉伯数字1!Criteria1后面是阿拉伯数字1!
-
??.SpecialCells
.SpecialCells可以很明显看出,这是选特定单元格的,但是前面怎么写呢?
录制的代码是这样,非常啰嗦,那么自己写怎么写呢?
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
琢磨很久,摸索出几种写法
(1)粗暴的把所有数据都写上
Range("a1:f1048").AutoFilter field:=4, Criteria1:="销售2部"
Range("a1:f1048").SpecialCells(xlCellTypeVisible).Select
Selection.Copy Sheet10.Range("a1")
'可以简写成下面
Sheet1.Range("a1:f" & k).AutoFilter field:=4, Criteria1:=sht.Name
Range("a1:f" & k).SpecialCells(xlCellTypeVisible).Copy Sheets(sht.Name).Range("a1")
(2)选一个单元格,筛选后默认就是选中筛选后的数据
Sheet1.Range("a1").AutoFilter field:=4, Criterial1:="销售2部"
Selection.SpecialCells(xlCellTypeVisible).Copy Sheet10.Range("a1")
(3)用with貌似更方便些
Range("a1").Select
With Selection
.AutoFilter field:=4, Criteria1:="一车间"
.SpecialCells(xlCellTypeVisible).Copy Sheets("一车间").Range("A1")
- 官方文档解析
查看了该方法的描述,很详细,更糊涂了😂
一条一条慢慢来看额。
语法
expression.AutoFilter (Field, Criteria1, Operator, Criteria2, SubField, VisibleDropDown)
expression:一个返回 Range 对象的表达式。
Field、Criteria1、Criteria2,没什么好讲的,看一下就知道了;至于显示筛选箭头,默认true显示,一般没必要改成false。
- Operator 操作符
一个指定筛选器类型的 XlAutoFilterOperator 常量。??我也看不懂;
那么看个例子,筛选介于50到100间的数字:
Selection.AutoFilter
ActiveSheet.Range("$A$1:$F$1048").AutoFilter Field:=6, Criteria1:=">=50", Operator:=xlAnd, Criteria2:="<=100"
看了例子一下就明白很多了吧;其实用大白话讲就是,条件1+操作符+条件2 = 复合筛选条件,可以做更复杂的筛选。
照搬官方的解释,11种,用到的时候再翻文档吧,记是肯定记不住的。
- Subfield 子域
subfield,这个是针对新增的特殊数据类型(股票和地理)有效,一个单元格里的数据可包含多项数据,365和web版限定参数。如果使用过可以留言详细说下,谢谢,这里就pass了。
以上。