在Excel中过滤数据的VBA代码(8个例子)

  • Share This
Hugh West

ǞǞǞ 排序& 过滤命令 有一个有限的范围,以 过滤数据 .但使用 VBA 你可以 过滤数据 本文将为你提供8个有用的例子,供你使用。 VBA 编码为 过滤数据 在EXCEL中使用 VBA 代码与生动的插图。

下载实践工作手册

你可以从这里下载免费的Excel模板,自己练习。

筛选数据的VBA代码.xlsm

使用VBA代码在Excel中过滤数据的8个例子

让我们先来介绍一下我们的数据集,它代表了一些 学生的性别、地位和年龄 .

1.使用VBA代码在Excel中基于文本标准过滤数据

在我们的第一个例子中,我们将使用 VBA 过滤器 只有 男性 的学生。 性别 列的数据集。

步骤。

  • 右键点击 关于 片名 .
  • 那么 选择查看代码 上下文菜单 .

不久之后,一个 VBA 窗口将被打开。

  • 类型 下面的 代码 在它-
 Sub Filter_Data_Text() Worksheets("Text Criteria").Range("B4").AutoFilter Field:=2, Criteria1:="Male" End Sub 
  • 后来,尽量减少 VBA

代码分解

  • 在这里,我创建了一个 程序。 过滤_数据_文本() .
  • 然后用 范围 属性来声明我们各自的 纸张名称 范围
  • 接下来,我用 自动过滤方法 来使用 标准 我选择的地方 领域:=2 途径 第2栏 .而且 Criteria1:="男性" 过滤器 的数据。 男性。
  • 此后,对 开放 宏程序对话框 , 点击 如下: 开发者>宏。

  • 选择 巨集名称 中提到的 代码 .
  • 最后,只是 按下运行 .

现在看一下,我们只得到了 男性学生的数据 之后 筛选 .

阅读更多。 筛选数据:基于单元格值的6种高效方法

2.应用VBA代码在一列中用多个标准过滤数据

在这里,我们将 过滤器 从数据集的第三列中,我们将 过滤器 毕业生 研究生 学生。

步骤。

  • 遵循前两个步骤 的。 第一个例子 以打开 VBA窗口 .
  • 后来。 类型 下面的 代码 在它-
 Sub Filter_One_Column() Worksheets("One Column").Range("B4").AutoFilter Field:=3, Criteria1:="毕业生", Operator:=xlOr, Criteria2:="研究生" End Sub 
  • 然后最小化 VBA

代码分解

  • 在这里,我创建了一个 程序。 Filter_One_Column() .
  • 然后用 范围 属性来声明我们各自的 纸张名称 范围
  • 接下来,我用 自动过滤方法 来使用 标准 我选择的地方 领域:=3 途径 第3栏 ...这里。 标准1:="毕业生" 标准2:="研究生" 过滤器 学生的 状况 .
  • 最后,我用 操作员:=xlOr 申请 条件 过滤器 为多个标准。
  • 在这一刻。 遵循 第三步 第一个例子 以打开 宏程序对话框 箱子 .
  • 后来。 选择 指定的 巨集名称 按下运行 .

不久之后,你会得到基于多个标准的过滤行,如下图。

阅读更多。 在Excel中过滤多个条件(4种合适的方法)

3.应用VBA代码在Excel的不同列中用多个标准过滤数据

现在我们将 过滤器 为多个标准- 男性 毕业生 学生。

步骤。

  • 遵循前两个步骤 的。 第一个例子 以打开 VBA
  • 后来。 下面的 代码 在它-
 Sub Filter_Different_Columns() With Worksheets("Different Columns").Range("B4") .AutoFilter Field:=2, Criteria1:="Male" .AutoFilter Field:=3, Criteria1:="Graduate" End With 结束 Sub 
  • 在这之后 最小化VBA窗口 .

代码分解

  • 在这里,我创建了一个 程序。 Filter_Different_Columns() .
  • 然后,我用 语句来使用 多列 .
  • 然后用 范围 属性来声明我们各自的 纸张名称 范围
  • 接下来,我用 自动过滤方法 来使用 标准 我选择的地方 领域:=2 途径 第2栏 领域:=3 途径 第3栏 .
  • 在此,选定 Criteria1:="男性" 性别 栏目和 标准1:="毕业生" 状况 栏目,以 过滤器 数据来自 不同栏目 .
  • 那么 按照第三步 第一个例子 以打开 宏程序对话框 .
  • 后来。 选择 指定的 巨集名称 按下运行 .

下面是多个标准的输出。

阅读更多。 Excel VBA在同一列中通过多个标准进行过滤(6个例子)。

4.使用VBA代码过滤Excel中的前3项

在这个例子中,我们将过滤 前三名学生 按其 年龄 .

步骤。

  • 遵循前两个步骤 的。 第一个例子 以打开 VBA窗口 .
  • 那么 类型 下面的 代码 在它-
 Sub Filter_Top3_Items() ActiveSheet.Range("B4").AutoFilter Field:=4, Criteria1:="3", Operator:=xlTop10Items End Sub 
  • 之后,尽量减少 VBA窗口 .

代码分解

  • 在这里,我创建了一个 程序。 过滤器_Top3_Items() .
  • 然后用 操作员:=xlTop10Items 过滤器 前三名 数据 .
  • 现在 按照第三步 第一个例子 以打开 宏程序对话框 箱子 .
  • 那么 选择巨集名称 准则中提到的,以及 按下运行 .

然后你将得到如下图所示的输出

阅读更多。 如何使用Excel VBA根据单元格值进行过滤(4种方法)

类似读物

  • 如何在Excel中应用过滤器时进行复制和粘贴
  • 如何过滤Excel中的唯一值(8种简单方法)
  • 用VBA在Excel中过滤多个条件(包括AND和OR两种类型)
  • 如何在Excel中使用文本过滤器(5个例子)
  • 如何在Excel中按日期过滤(4种快速方法)

5.使用VBA代码在Excel中过滤前50个百分点

让我们用 VBA 编码来过滤。 前百分之五十 的学生 根据他们的年龄 .

步骤。

  • 首先。 遵循前两个步骤 的。 第一个例子 以打开 VBA窗口 .
  • 后来。 类型 下面的 代码 在它-
 Sub Filter_Top50_Percent() ActiveSheet.Range("B4").AutoFilter Field:=4, Criteria1:="50", Operator:=xlTop10Percent End Sub 
  • 尽量减少 VBA窗口 .

代码分解

  • 在这里,我创建了一个 程序。 滤波器_Top50_Percent() .
  • 后来,用 操作员:=xlTop10Percent 筛选出 排名前50%的人来自 第4栏 .
  • 在这一刻。 按照第三步 第一个例子 以打开 宏对话框。
  • 那么 选择 指定的 巨集名称 按下运行 .

总共有 7名学生 因此,对于 百分之五十 画面上显示的是大约 三个学生 .

阅读更多。 如何在Excel中使用利润百分比公式(3个例子)

6.应用VBA代码,使用通配符过滤数据

我们可以用 通配符-*(星号)。 VBA代码 在Excel中过滤数据。 从 状态栏 ,我们将只过滤 含有 "Post "的值 .

步骤。

  • 遵循前两个步骤 的。 第一个例子 以打开 VBA窗口 .
  • 那么 下面的 代码 在它-
 Sub Filter_with_Wildcard() ActiveSheet.Range("B4").AutoFilter Field:=3, Criteria1:="*Post*" End Sub 
  • 后来,尽量减少 VBA窗口 .

代码分解

  • 在这里,我创建了一个 程序。 Filter_with_Wildcard() .
  • 然后使用 范围 ("B4") 来设置范围。
  • 下一页 , 使用过的 自动过滤 过滤器 领域:=3 途径 第3栏。
  • Criteria1:="*Post*" 过滤器 含有 "Post "的值。
  • 现在 按照第三步 第一个例子 以打开 宏对话框。
  • 选择 指定的 巨集名称 按下运行 .

然后你就会得到想要的输出。

阅读更多。 如何在Excel中添加过滤器(4种方法)

7.嵌入Excel VBA,在Excel的新工作表中复制过滤后的数据

看到我的数据集中有一些经过过滤的数据。 现在我将它们复制到一个新的工作表中,使用 VBA . 这些代码在工作表中不能正常工作,你必须在模块中应用它们。

步骤。

  • 按Alt+F11 以打开 VBA

  • 然后点击 插入> 模块 打开一个模块 .

  • 现在 下面的 代码 -
 Sub Copy_Filtered_Data_NewSheet() Dim xRng As Range Dim xWS As Worksheet If Worksheets("Copy Filtered Data").AutoFilterMode = False Then MsgBox "Noo filtered data" Exit Sub End If Set xRng = Worksheets("Copy Filtered Data").AutoFilter.Range Set xWS = Worksheets.Add xRng.Copy Range("G4" End Sub 
  • 然后最小化 VBA

代码分解

  • 在这里,我创建了一个 程序。 Copy_Filtered_Data_NewSheet() .
  • 在这之后宣布了两个变量--x Rng 由于范围和 xWS 作为工作表。
  • 然后使用 一个 IF语句 来检查 已过滤
  • 后来,用 MsgBox 来显示输出。
  • 然后使用 Worksheets("Copy Filtered Data").AutoFilter.Range 来选择 已过滤 范围和使用的 添加 来添加一个新的工作表。
  • 最后。 复制Range("G4") 将复制 已过滤 数据到 新板材 .
  • 后来。 按照第三步 第一个例子 以打开 宏程序对话框 .
  • 那么 选择 指定的 巨集名称 按下运行 .

现在看到,Excel已经打开了一个新的工作表,并复制了被过滤的行。

阅读更多。 Excel过滤器的快捷方式(3种快速使用方法及示例)

8.应用VBA代码,使用下拉列表过滤数据

在我们的最后一个例子中,我们将首先制作一个性别的下拉列表,然后我们将使用它来过滤数据。 为此,我已经将性别标准放在另一个位置,我们将在 细胞D14 .

步骤。

  • 选择 细胞D14 .
  • 那么 点击 如下: 数据> 数据工具> 数据验证> 数据验证。

不久之后,一个 对话框 将打开。

选择列表 允许下拉 .

那么 点击 "打开 "图标 源箱 .

现在 选择标准范围 按下回车键 .

  • 此时此刻,只要 按OK键 .

现在我们的 下拉式 列表已准备好。

  • 现在 遵循前两个步骤 的。 第一个例子 以打开 VBA窗口 .
  • 那么 下面的 代码 在它-
 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$14" Then If Range("D14") = "All" Then Range("B4").AutoFilter Else Range("B4").AutoFilter Field:=2, Criteria1:=Range("D14") End If End If End Sub 
  • 那么 最小化VBA窗口 .

代码分解

  • 在这里,我创建了一个 私募基金 程序。 Worksheet_Change(ByVal Target As Range).
  • 然后,我选择了 工作表 一般 变化 申报 .
  • 然后设置 地址 以了解其位置。
  • 最后在 基金会 语句使用了 自动过滤 方法与 场地 标准
  • 现在只是 从下拉列表中选择标准 过滤器将被激活 .

这里是 已过滤 选择后输出 男性 下拉式 .

阅读更多。 如何在Excel中通过另一个工作表中的列表进行过滤(2种方法)

练习部分

你会在上面给出的Excel文件中得到一个练习表,以练习所解释的方法。

总结

我希望上面描述的程序能够很好地使用 VBA 编码为 过滤器 欢迎在评论区提出任何问题,并请给我反馈。

Hugh West is a highly experienced Excel trainer and analyst with over 10 years of experience in the industry. He holds a Bachelor's degree in Accounting and Finance and a Master's degree in Business Administration. Hugh has a passion for teaching and has developed a unique teaching approach that is easy to follow and understand. His expert knowledge of Excel has helped thousands of students and professionals worldwide improve their skills and excel in their careers. Through his blog, Hugh shares his knowledge with the world, offering free Excel tutorials and online training to help individuals and businesses reach their full potential.