VBA-Range.AutoFilter 方法的一些“坑”
学到筛选的时候遇到一些小小的“坑”,记录下。
- 录制出来的宏是这样的,
Sub 宏1()
' 宏1 宏Rows("1:1").SelectSelection.AutoFilterActiveSheet.Range("$A$1:$F$1048").AutoFilter field:=4, Criteria1:="财务部"Range("A1").SelectRange(Selection, Selection.End(xlToRight)).SelectRange(Selection, Selection.End(xlDown)).SelectSelection.SpecialCells(xlCellTypeVisible).SelectSelection.CopySheets("财务部").SelectRange("A1").SelectActiveSheet.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").SelectWith 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.AutoFilterActiveSheet.Range("$A$1:$F$1048").AutoFilter Field:=6, Criteria1:=">=50", Operator:=xlAnd, Criteria2:="<=100"
看了例子一下就明白很多了吧;其实用大白话讲就是,条件1+操作符+条件2 = 复合筛选条件,可以做更复杂的筛选。
照搬官方的解释,11种,用到的时候再翻文档吧,记是肯定记不住的。

- Subfield 子域
subfield,这个是针对新增的特殊数据类型(股票和地理)有效,一个单元格里的数据可包含多项数据,365和web版限定参数。如果使用过可以留言详细说下,谢谢,这里就pass了。


以上。

![[linux kernel]slub内存管理分析(7) MEMCG的影响与绕过](https://img-blog.csdnimg.cn/b42bfacfc4894c03a9f526c4041b23a7.gif#pic_center)













