前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Range单元格对象方法(二)AutoFilter自动筛选

Range单元格对象方法(二)AutoFilter自动筛选

作者头像
无言之月
发布2019-10-13 15:42:56
5.2K0
发布2019-10-13 15:42:56
举报

大家好,今天继续介绍单元格对象的常用方法,本节主要介绍自动筛选AutoFilter方法。

平时使用excel时,自动筛选是经常用到的功能,下面将用代码来实现自动筛选功能。

自 动 筛 选 功 能

首先简单看下平时使用的自动筛选,点击数据选项卡中的筛选。在excel表格表头部分会自动出现筛选的倒三角符号。

点击筛选倒三角符号的下拉菜单可以看到有排序方式。以及文本和数字的筛选条件等。

进行数据筛选时是选择一列或多列按某条件来筛选。平时比较常用,就不再演示。可以注意下自定义筛选界面。可以设置两个筛选条件,两个条件有“与”“或”两种关系,同时对于字符,也支持通配符 ?代表单个字符 * 代表任意多个字符。这有助于接下来的学习。

自动筛选AutoFilter方法

下面就学习如果通过VBA代码来实现单元格的自动筛选方法。

先看单元格的自动筛选autofilter方法的语法格式,(参数较多,是可以根据需要省略)

AutoFliter(field,criteria1,operator,criteria2,visibledropdown)

1、参数field:指筛选的字段所在的列的数值。

2、参数criteria1和criteria2是两个指定的判断条件(为字符串形式)。参数criteria1是必须的,参数criteria2是可选项,两个条件的关系由operator决定。而参数operator是xltop10ltems等时,参数criteria1是指定项目数量。

3、参数operator,是指定筛选类型,为xlautofilteroperator常量之一。下面的值根据需要进行选择。(主要是前六个,下面示例帮助理解。)

4、visibledropdown参数的默认值为ture是限制筛选的下拉箭头,值为false时,隐藏筛选字段的下拉箭头。

当所有autofliter所有参数均省略时,只出现字段筛选下拉箭头。

示 例

下面通过示例来学习单元格Autofilter方法

一、筛选班级是二班的学生

班级列为第二列

,单元格对象可以第一个单元格也可以是筛选区域。演示如下:

Range("a1").AutoFilter field:=2, Criteria1:="=二班"

autofilter方法的两个参数field的值为2,即筛选列是第二列,即B列(field:=可以省略。)。criteria1是判断条件,注意这里的写法Criteria1:="=二班" ,即值等于字符串表达式。(criteria1:=可以省略)

二、筛选三班分数>=90分的学生

第二个筛选条件省略掉了field:=和criteria1:=的参数格式,保留值,熟练后可简化代码。

Range("a1").AutoFilter field:=2, Criteria1:="=三班"

Range("a1").AutoFilter 5, ">=90"

两个条件分别筛选两列,筛选出了班级是三班的,分数大于等于90的学生名单。

三、筛选出分数的前三名

即对第五列的数据进行筛选,筛选出最大的值中的前三项,这里就需要加入operator参数,criteria1变为指定项目数。

代码中的三个过程作用是相同的,后两个过程将参数格式省略。

第一个过程中参数为field参数为5(省略field:=),由于有operator参数等于常量xltop10items代表最大项的值,所以criteria1参数的值设定为“3”。(代表分数最大的三个值。)

下面两个过程只保留了值criteria1只保留了值“3”(注意加引号)。而operator参数值保留了常量xltop10items,也可以直接用常量对应的数值,这里对应的值为数字3。

四、筛选分数>=90和<=95

省略了格式的参数,筛选列为第5列,筛选条件为“>=90”和"<=95"。两个条件的关系operator的值为xland。即两个条件为并且的关系。

Range("a1").AutoFilter 5, ">=90", xlAnd, "<=95"。

五、筛选的结果复制

筛选之后用单元格copy方法,copy方法复制的是可见的单元格,这样按条件筛选的90到95之内的同学的数据复制sheet2中。

六、筛选结果行删除

删除删选单元格,是利用筛选之后删除可见的单元格来实现。(删除时要保留表头所在的第一行)删除结束时,要将工作表的筛选模式关闭。

具体的代码如下,先筛选出结果,然后删除第一行表头外的可见数据整行,最后关闭自动筛选。

Sub test()

Range("a1").AutoFilter 5, ">=90", xlAnd, "<=95"

Dim i As Integer

i = Range("a1045576").End(xlUp).Row

Range("a2:a" & i).SpecialCells(xlCellTypeVisible).EntireRow.Delete

Worksheets(1).AutoFilterMode = False

End Sub

代码中利用了单元格SpecialCells(xlCellTypeVisible)方法,单元格为Range("a2:a" & i)为单元格对象,是为了保留第一行,而将剩余筛选后的可见单元格整行删除。(Speicalcells方法后续会介绍。)

最后则用worksheet的的autofiltermode属性值为False,将自动筛选关闭。(对于自动筛选模式,通常也有在代码开始时做IF判断是否开启,先关闭再开启。)


本节主要介绍了单元格对象的autofilter方法的使用,以及筛选之后的数据复制和删除。(删除是筛选后删除可见的单元格,注意保留表头的第一行的方法。)。自动筛选使用完后通过worksheet对象的autofiltermode属性来关闭,祝大家学习快乐,有问题可以给我留言。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel和Access学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档