VBA:利用高级筛选自动筛选列表

标签:VBA,高级筛选

这是thesmallman.com上的一个示例,利用VBA、高级筛选和公式进行数据筛选。

这个示例的目的是根据数据验证下拉列表选择要在列表中筛选的数据,并显示相应的数据。

首先要做的是设置数据验证。这里有一些车辆碰撞信息,并建立了3个列表:星期几、碰撞类型和道路使用者。这三个条件将用于筛选列表数据。

示例的一个优点是能够对下拉列表中选择的项目进行筛选,或合并所选项目(所有项目以及单个项目)。例如,可能希望看到周日发生的事故,但也可能希望看到全天发生涉及多辆车的事故。

使用公式可以帮助实现,因为在通配符的帮助下,可以创建基于选择筛选所有内容的功能。

例如,公式:

=IF(K2=”All Days”,"*",K2)

如果单元格K2中选择“All Days”,则显示通配符*。

对于碰撞类型和道路使用者,按照相同的步骤。那么,现在有了显示每个条件的一个或全部的公式。

此时,如果从单元格K2到K4的任何单元格发生变化,则需要运行相应的过程,因此需要调用工作表的Change事件。

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [K2:K4]) Is Nothing Then

AdvFilt '当上面的单元格内容变化时运行

End If

End Sub

如果单元格区域K2:K4中的任何单元发生变化,将触发上面的过程。下面是高级筛选的VBA代码。

Sub AdvFilt()

Dim rng As Range

Set rng = Range("A9", Range("T" & Rows.Count).End(xlUp))

rng.AdvancedFilter 1, [C5:E6], 0

End Sub

上文中的公式在单元格区域C5:E6中,这些单元格为高级筛选提供了条件。该过程可以快速有效地获取选择的数据。如下图1所示。

图1

有兴趣的朋友可以到原网站下载示例工作簿,也可以到知识星球App完美Excel社群下载示例工作簿。