Microsoft Excel 中的 VBA RegEx2025年4月26日 | 阅读13分钟 Microsoft Excel VBA (Visual Basic for Applications) 中的正则表达式 (RegEx) 是比传统 Excel 函数更高级地搜索和操作文本的工具。想象一下,它是处理海量数据集的超能力。正则表达式是一种模式或一组规则,可帮助我们查找字符串中存在的特定类型的文本,例如日期、电子邮件地址,甚至是简单的单词。RegEx 通过定义一个与文本特定特征匹配的模式来工作。它可以查找特定字母、数字、符号,甚至是它们的组合。
在 VBA 中,RegEx 被称为一个对象,它使我们能够处理所有这些模式。尽管它一开始可能看起来很复杂,但它与其他 Microsoft Excel 函数更相似,但功能更强大。如果我们熟悉 Excel 函数,例如 LEFT、RIGHT 或 MID,RegEx 非常相似,只是它允许更灵活和详细的文本匹配。例如,我们还可以使用 RegEx 查找以某个单词开头、包含数字或匹配特定规则的文本。这就像拥有一个搜索功能,它不仅能理解精确匹配,还能查找模式。为了在 Microsoft Excel VBA 中有效地使用它,我们必须创建一个 RegEx 对象,然后我们还需要设置要搜索的模式,然后告诉 VBA 在找到匹配项时该怎么做。 尽管 VBA RegEx 看起来很复杂,但一旦我们了解了它的基础知识,它只是在选定的电子表格中与文本交互的另一种方式,使处理复杂任务变得更容易,例如以更自动化、更高效的方式验证、提取或替换数据。 RegEx 具有以下参数和属性
此外,相应的 RegEx 促进以下三种操作
主要收获
VBA RegEx 模式我们都知道,Microsoft Excel VBA 中特定的 RegEx 模式是通过使用特殊字符、表示不同字符的语法和操作的组合来定义的。现在我们将看到下面列表中嵌入其描述的最常用的 RegEx 字符。
以下是 VBA 中 RegEx 模式的一些示例
RegEx 对象的属性和方法 尽管如此,特定的 VBA RegEx 模式主要通过使用 RegExp 对象来定义。但是,RegExp 对象具有一些属性和方法,我们可以轻松地使用它们来控制其行为,并且还需要对我们正在搜索的文本执行操作。以下是 RegExp 对象的一些最常用的属性和方法 VBA RegEx 对象的属性在 Microsoft Excel VBA 中公开使用的 VBA RegEx 对象的各种属性如下
RegEx 对象的方法
示例现在,在本教程中,我们将进一步探讨如何有效地使用正则表达式 (RegEx) 在 Microsoft Excel VBA 中从非结构化文本列中提取电子邮件地址。A 列将包含电话号码和电子邮件地址的混合,我们将编写 VBA 代码以仅提取电子邮件地址,然后将其有效地输出到单独的列 (B 列) 中。 ![]() 在 Microsoft Excel VBA 中积极使用 RegEx 提取电子邮件的分步指南 第 1 步:打开 VBA 编辑器:我们将从打开 Microsoft Excel VBE 编辑器开始。为此,我们必须按下键盘上的快捷按钮,即 Alt + F11。这将打开 Visual Basic for Applications (VBA) 编辑器,我们可以在其中有效地编写和管理代码。 ![]() 第 2 步:启用 RegEx 库:在 Microsoft Excel VBA 中使用 RegEx 之前,我们需要启用 Microsoft VBScript Regular Expressions 5.5 库。为此,我们需要执行以下操作
此特定步骤确保我们可以访问必要的功能,以有效地使用 VBA 中的正则表达式。 第 3 步:插入新模块:在此步骤中,我们需要插入一个新模块,我们将在其中编写代码。为此
![]() 第 4 步:声明所有必要的变量:在此特定步骤中,我们将有效地声明代码中使用的 变量。我们需要
此步骤的代码 ![]() 第 5 步:定义电子邮件 ID 的正则表达式模式:现在在此步骤中,我们将定义用于识别电子邮件地址的正则表达式模式。 匹配电子邮件地址的模式如下
此模式分解如下
第 6 步:获取 A 列中的单元格范围:在此步骤中,我们只需定义 A 列中包含我们要搜索电子邮件地址的文本的单元格范围。此外,我们可以使用 Cells(Rows.Count, "A").End(xlUp) — 行技术来获取 A 列中包含数据的最后一行。 ![]() 然后我们将使用 For Each 循环遍历范围内的每个单元格 ![]() 第 7 步:在每个单元格上执行正则表达式:现在,对于范围内的每个单元格,我们获取其值(非结构化文本),然后执行 RegEx 模式以搜索电子邮件地址。Execute 方法返回在文本中找到的所有匹配项的集合。 ![]() 第 8 步:循环遍历每个匹配项并打印电子邮件 ID:执行 RegEx 模式后,相应的匹配集合包含在当前单元格中找到的所有匹配项。通常,我们循环遍历每个匹配项,然后使用 Offset() 方法将电子邮件地址打印在相邻单元格(B 列)中。 ![]() Offset(0, 1) 方法将一列(位于 A 列中当前单元格右侧的 B 列)移动,并将相邻单元格的值设置为匹配的电子邮件地址。 第 9 步:保存模块:编写完代码后,我们需要通过单击顶部菜单中的“文件”并保存来保存模块。并且我们还需要确保将工作簿保存为 Macro-Enabled Workbook (.xlsm),以便以后也可以执行宏。 ![]() 第 10 步:运行宏:在此步骤中,要有效地运行宏,我们需要按下 Alt + F8 以打开“宏”对话框。然后,我们需要选择名为 ExtractEmails 的宏,然后单击运行。 ![]() 第 11 步:检查 B 列中的结果:运行宏后,我们必须检查 B 列中的值。尽管如此,我们还需要查看从 A 列中可用的文本中提取的所有电子邮件地址。 ![]() 完整代码 这是完整的 VBA 代码 此外,这个简单的 VBA 代码主要演示了我们如何轻松地使用正则表达式来从 Microsoft Excel 中选定的单元格范围中提取电子邮件地址。通过遵循所有这些步骤,我们可以轻松识别并从大量非结构化数据中提取电子邮件地址,从而节省数据处理任务中的时间和精力。 需要记住的要点在使用 Microsoft Excel VBA 中的相应 RegEx 时,存在一些需要记住的重要点。
常见问题问题 1:提到了 Microsoft Excel VBA RegEx 中 `Test` 和 `Execute` 之间的主要区别是什么? 答案:Test:这会检查我们正则表达式中的模式是否与我们正在查找的文本的任何部分匹配。如果测试条件匹配,我们将得到输出 `True` 值,否则我们将得到 `False` 值作为结果。 Execute:这会在文本上运行正则表达式,并为我们提供它找到的所有匹配项的详细列表。它不仅仅告诉我们是否存在匹配;尽管如此,它还会为我们提供有关这些匹配项在文本中的位置的更多信息。 所以,Test 就像一个快速的“是”或“否”答案,而 Execute` 则为我们提供了所有匹配项的完整细分。 问题 2:如何在 VBA RegEx 中转义字符? 答案:在正则表达式中,某些字符,如句点 (`.`) 或星号 (`*`),具有特殊含义。如果实际上我们想字面地使用这些字符(就像我们指的是实际的句点,而不是“任何字符”),我们也需要转义它们。我们可以通过在字符前面添加反斜杠 (`\`) 来实现这一点。
|
我们请求您订阅我们的新闻通讯以获取最新更新。