VBA自动筛选完全指南(上)

2022-11-16 13:49:56 浏览数 (1)

标签:VBA,自动筛选,Autofilter方法

许多Excel功能都可以使用VBA来实现,自动筛选就是其中之一,对应着VBA的Autofilter方法。

在功能区“数据”选项卡“排序和筛选”组中,单击“筛选”按钮(如下图1所示)就可以执行自动筛选,这也是我们使用条件筛选数据集的常见操作。

图1

如果只需要筛选数据并执行一些基本操作,建议直接使用Excel工作界面提供的内置筛选功能。而当希望将筛选数据作为自动化的一部分时,应使用VBA的Autofilter方法。

例如,假设希望基于下拉选择快速筛选数据,然后将筛选的数据复制到新工作表中。虽然这可以使用内置筛选功能和一些复制粘贴来完成,但手动完成这项工作可能需要花费大量时间。在这种情况下,使用VBA自动筛选可以加快速度并节省时间。

Autofilter方法语法

Autofilter方法的语法如下:

表达式.AutoFilter(Field,Criteria1,Operator,Criteria2,VisibleDropDown)

其中:

表达式:想要应用自动筛选的单元格区域。

Field:可选参数,这是要筛选的列号,从数据集的左侧开始计算。因此,如果要根据第二列筛选数据,则该值应为2。

Criteria1:可选参数,这是筛选数据集所基于的条件。

Operator:可选参数,如果也使用Criteria2,则可以基于Operator(运算符)组合这两个条件。以下运算符可供使用:xlAndxlOrxlBottom10ItemsxlTop10ItemsxlBottom10PercentxlTop10PercentxlFilterCellColorxlFilterDynamicXlFilterFontColor、XlFilterIcon、XlFilterValues。

Criterial2:可选参数,这是筛选数据集所基于的第二个条件。

VisibleDropDown:可选参数,可以指定是否希望筛选下拉箭头图标显示在筛选列中。可取TRUE或FALSE。

在不使用任何参数的情况下,它只会对列应用或删除筛选图标。

代码语言:javascript复制
Sub FilterRows()
    Worksheets("Data").Range("A1").AutoFilter
End Sub

上面的代码简单地将AutoFilter方法应用于列(或者,如果已经应用了自动筛选,则将之删除)。

这只是意味着,如果在列标题中看不到筛选图标,则在执行上述代码后,将可以看到它,如果执行代码前可以看到它,则执行代码后它将被删除。

示例:基于文本条件筛选数据

数据集如下图2所示,想要基于“项目”列筛选数据。

图2

下面的代码筛选项目为“打印机”的所有行。

代码语言:javascript复制
Sub FilterRows1()
    Worksheets("Sheet1").Range("A1").AutoFilter Field:=2,       Criteria1:="打印机"
End Sub

上面的代码引用了工作表Sheet1,同时引用了单元格A1(数据集中的一个单元格)。注意,这里使用了Field:=2,因为“项目”列是数据集中从左起的第二列。

示例:同一列中多个条件(AND/OR)

仍然使用上图2所示的数据集,这次筛选“项目”列中“打印机”或者“空调”的所有数据。代码如下:

代码语言:javascript复制
Sub FilterRows2()
    Worksheets("Sheet1").Range("A1").AutoFilter Field:=2, _
      Criteria1:="打印机", _
      Operator:=xlOr, _
      Criteria2:="空调"
End Sub

注意,代码中使用了xlOr运算符,告诉VBA筛选满足两个条件中任意一个的数据。

同样,也可以使用AND条件。例如,如果想要筛选数量大于10但小于20的所有记录,可以使用下面的代码:

代码语言:javascript复制
Sub FilterRowsAnd()
    Worksheets("Sheet1").Range("A1").AutoFilter Field:=4, _
      Criteria1:=">10", _
      Operator:=xlAnd, _
      Criteria2:="<20"
End Sub

示例:不同列中多个条件

数据集同上。如果想要筛选“项目”列中是“打印机”且销售员是“李四”的所有记录,使用下面的代码:

代码语言:javascript复制
Sub FilterRows3()
    With Worksheets("Sheet1").Range("A1")
        .AutoFilter Field:=2, Criteria1:="打印机"
        .AutoFilter Field:=3, Criteria1:="李四"
    End With
End Sub

文章中所使用的示例数据和代码可到知识星球App完美Excel社群下载。

未完待续......

vba

0 人点赞