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

2019-10-13 15:42:56 浏览数 (2)

大家好,今天继续介绍单元格对象的常用方法,本节主要介绍自动筛选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属性来关闭,祝大家学习快乐,有问题可以给我留言。


0 人点赞