第一章 入门篇 1.17 AutoFilter语句 AutoFilter语句的功能相当于Excel菜单里的“筛选”。它的编写格式是这样的: 基准单元格.AutoFilter(Field,Criteria1,Operator,Criteria2,SubField,VisibleDropDown) 让我们来了解一下AutoFilter的参数: 基准单元格:要筛选区域里的任一单元格。 Field:筛选哪列?从列表最左列为第1列,往右累加 Criteria1:条件1 Operator:指定筛选的类型,在下面详细介绍它的类型 Criteria2:条件2 VisibleDropDown:true或false,筛选字段是否显示下拉箭头,默认为true Operator筛选类型: 1、xland 条件1和条件2并且关系 2、xlor 条件1和条件2或者关系 3、xlTop10Items 筛选最大前几,在条件1中指定前几 4、xlBottom10Items 筛选最小后几,在条件1中指定后几 5、xlTop10Percent 筛选最大前百分之多少,在条件1中指定百分比(如30%,参数填入30) 6、xlBottom10Percent 筛选最小后百分之多少,在条件1中指定百分比 7、xlFilterValues 筛选值 配合Array多条件筛选 8、XlFilterCellColor 单元格颜色 9、xlFilterFontColor 字体颜色 10、xlFilterIcon 筛选图标 11、xlFilterDynamic 动态筛选 例句: 从下表中筛选出原值大于1万元,并且小于10万元的资产。
Range('d1').autofilter 4, '>10000', xlAnd, '<100000' 前面我们说过了,AUTOFILTER语句对前面的基准单元格并不敏感,只要是筛选区域里的任意一个单元格就行。所以在这条语句里Range('d1')其实也就相当于Range('d1').CurrentRegion。 小程序: 利用autofilter的一些常用功能对下表进行操作:
Sub autofilter() Range('b1').autofilter 4, 3, xlTop10Items '显示第4列最大前3名 Range('b1').autofilter 4, 3, xlBottom10Items '显示第4列最小后3名 Range('b1').autofilter 4, 30, xlTop10Percent '显示第4列最大前30% Range('b1').autofilter 4, 30, xlBottomPercent '显示第4列最小后30% Range('b1').autofilter 4, '>=6800', xlAnd, '<100000' Range('b1').autofilter 2, '照相机', xlOr, '台式电脑' '上面两条语句结合使用,先对第4列的值进行筛选,然后在筛选出来的内容上再对第2列的值进行筛选 Sheets(1).AutoFilterMode = False '去除筛选状态,表格就会恢复到筛选前状态。 End Sub 将筛选出来的值拷贝到一个新建工作表中: Sub autofilter() Range('b1').autofilter 2, '空调' Set 筛选结果 = Range('a1').CurrentRegion Sheets.Add.Name = '空调' 筛选结果.Copy Sheets('空调').[a1] End Sub 从这个小程序可以看出,Copy方法仅复制可见单元格的内容。先把筛选出的内容赋值给变量,是因为新增工作表后,活动工作表就变成新增工作表了,所以要先赋值,否则筛选结果区域的选择就要加上原来筛选表的表名。另外,VBA里的变量可以用中文哟,是不是更加直观方便了呢? 利用这个小程序,加上循环语句,可以把不同项目的内容拆分到不同的工作表里。或者用Workbooks.Add新增工作簿,把不同项目的内容拆分到不同的文件中去。 |
|