别只用 Excel 公式!一招解锁「正则表达式」
- 2026-11-07 14:39:21
别只用 Excel 公式!一招解锁「正则表达式」
在处理 Excel 报表时,是否遇到过这种令人抓狂的情况: 很多时候,不得不感叹:「Excel 为何就没有内置正则(Regex)功能呢?」 今天,就分享这个压箱底的「黑科技」。只需一段简单的 VBA 代码,就能让你的 Excel 瞬间进化,直接在单元格里调用全能的「正则表达式」!
简单来说,「正则表达式」就是一种文字匹配的「万能模版」。无论数据多乱,只要有规律,它就能精准地把你要的东西「钓」出来。
通过以下代码,可自定义一个名为REGEXP的函数,用法和SUM一样简单。 请按下Alt + F11进入 VBA 编辑器,插入一个「模块」,然后粘贴以下代码:
装好代码后,直接在单元格输入公式(假设数据在A2):

公式示例: 
打开 VBA:按 Alt + F11。 新建模块:点击「插入」 -> 「模块」。 粘贴代码:贴入上述代码。 保存格式:文件必须另存为「Excel 启用宏的工作簿 (.xlsm)」,否则代码会失效。 调用函数:像平时用 IF 函数一样,在单元格输入 =REGEXP(...) 即可。
「工欲善其事,必先利其器。」 正则表达式虽然看着像「乱码」,但它其实逻辑性极强。与其在复杂的嵌套公式里苦苦支撑,不如直接用「正则表达式」一劳永逸。

想从一堆杂乱的地址中提取邮编,却发现LEFT和RIGHT函数根本不够用? 想校验手机号格式,结果公式写了三行长,自己都看不懂? 想提取括号里的内容,却在FIND和MID的嵌套里迷失自我?
何为正则表达式?
核心秘籍:自定义 REGEXP 函数
1. 代码实现
'''''' Excel 正则表达式自定义函数 (REGEXP)' 功能:在 Excel 单元格内直接进行正则匹配提取'''''Function REGEXP(ByVal Target As String, _ByVal RegPattern As String, _Optional ByVal SubMatchIndex As Integer = -1, _Optional ByVal IsNumbering As Boolean = False) As VariantDim reg As ObjectDim matches As ObjectDim result As Variant' 设置默认返回值为 #N/AREGEXP = CVErr(xlErrNA)' 基础校验If Target = "" Or RegPattern = "" Then Exit Function' 创建正则表达式对象 (后期绑定,无需手动勾选引用)Set reg = CreateObject("VBScript.RegExp")With reg.Pattern = RegPattern ' 设置正则规则.IgnoreCase = True ' 忽略大小写.Global = True ' 全局搜索End With' 执行匹配Set matches = reg.Execute(Target)' 如果找到匹配项If matches.Count > 0 Then' 情况 A:如果指定了子匹配索引 (SubMatchIndex >= 0)If SubMatchIndex >= 0 ThenIf matches(0).SubMatches.Count > SubMatchIndex Thenresult = matches(0).SubMatches(SubMatchIndex)ElseExit FunctionEnd If' 情况 B:未指定索引,则返回整个匹配到的字符串Elseresult = matches(0).ValueEnd If' 格式转换:如果要求转为数值,且结果确实是数字If IsNumbering And IsNumeric(result) ThenREGEXP = CDbl(result)ElseREGEXP = resultEnd IfEnd IfEnd Function
职场常用正则公式大集合
| 需求 | 正则表达式 | 示例公式 |
|---|---|---|
| 提取手机号 | 1[3-9]\d{9} | =REGEXP(A2, "1[3-9]\d{9}") |
| 提取金额 | \d+(\.\d+)? | =REGEXP(A2, "\d+(\.\d+)?", -1, TRUE) |
| 只留中文 | [\u4e00-\u9fa5]+ | =REGEXP(A2, "[\u4e00-\u9fa5]+") |
| 提取括号内容 | \((.*?)\) | =REGEXP(A2, "\((.*?)\)", 0) |
| 提取邮箱 | [\w.-]+@[\w.-]+\.[a-z]{2,} | =REGEXP(A2, "[\w.-]+@[\w.-]+\.[a-z]{2,}") |
| 身份证号 | \d{17}[\dXx] | =REGEXP(A2, "\d{17}[\dXx]") |
转换示例:


如何安装与使用?
结语
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。