分享

学习VBA,报表做到飞 第一章 入门篇 1.17 AutoFilter语句

 拾叁亿人 2023-04-05 发布于云南

第一章 入门篇

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万元的资产。

卡片号

资产名称

建卡

原值

净值

00007933

空调

2007-12-31

498720.00

14961.60

00007934

台式电脑

2007-12-31

35670.00

1070.10

00012189

空调

2007-12-31

12420.00

372.60

00014439

照相机

2008-06-11

6800.00

204.00

00014439

空调

2008-06-11

6800.00

204.00

00014439

空调

2008-06-11

6800.00

204.00

Range('d1').autofilter 4, '>10000', xlAnd, '<100000'

前面我们说过了,AUTOFILTER语句对前面的基准单元格并不敏感,只要是筛选区域里的任意一个单元格就行。所以在这条语句里Range('d1')其实也就相当于Range('d1').CurrentRegion。

小程序:

利用autofilter的一些常用功能对下表进行操作:

卡片号

资产名称

建卡日期

原值

净值

00007933

空调

2007-12-31

498720.00

14961.60

00007934

台式电脑

2007-12-31

35670.00

1070.10

00012189

音响设备

2007-12-31

12420.00

372.60

00014439

照相机

2008-06-11

6800.00

204.00

00014439

音响设备

2008-06-11

6800.00

204.00

00014439

音响设备

2008-06-11

6800.00

204.00

00072375

监控设备

2013-12-28

16986.00

509.58

00072448

空调

2013-12-28

6405.00

192.15

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新增工作簿,把不同项目的内容拆分到不同的文件中去。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多