ARTICLE · 1223424
Excel里还在手动Ctrl+H? VBA正则Replace,3个案例让文本处理效率飞升
你是否也这样崩溃过?
几百行客户信息,手机号、日期、备注乱七八糟;你想统一格式、给手机号打码、把一堆空格清理干净——于是你一行行手动 Ctrl+H,改到眼花。
其实 Excel 自带一个「批量文本处理神器」:VBA 正则的 Replace 方法。今天这篇,我用 3 个超简单案例,带你从「完全不懂」到「能直接抄代码用」,每一步都拆给你看。
✨ 先看效果(这就是今天要实现的)
① 手机号打码
13812345678 → 138****5678 | 15900001111 → 159****1111
② 日期统一
2026.10.21 / 2026/11/01 / 2027年1月5日 → 2026-10-21 / 2026-11-1 / 2027-1-5
③ 空格清理
"张 三 男 28 岁" → "张 三 男 28 岁"
一、正则 Replace 到底是什么?
普通的「查找替换」只能找一个固定的词,比如把"苹果"换成"橘子"。但现实中很多活是「有规律」的:把所有手机号中间4位盖住、把所有日期统一成横杠。这种活,正则 Replace 最擅长——它是「按套路找、按套路换」。
它背后是一个叫 RegExp 的对象(全称 Regular Expression,正则表达式)。一句话记住它的作用:
🧠 一张知识树,记住全篇
VBA 正则 Replace
↓
二、怎么用?四件套 + 五步走
用正则 Replace,核心就 4 个要素(我叫它「四件套」):
Pattern规则:要匹配什么,写成正则式子(最关键)
Global是否全部:True=替换所有匹配;False=只换第一个
IgnoreCase忽略大小写:True=不分 a/A;默认 False
Replace执行:Replace(原文本, 新内容),返回换好的新文本
🔄 使用流程(五步走)
① 原始文本
↓
② 设 Pattern 规则
↓
③ 开 Global / IgnoreCase
↓
④ Replace 执行替换
↓
⑤ 得到干净文本
📐 通用代码骨架(背下这个,套案例就行)
Sub 示例()Dim reg As ObjectSet reg = CreateObject("VBScript.RegExp") ' ① 创建正则对象reg.Pattern = "这里写规则" ' ② 写匹配规则reg.Global = True ' ③ 全部替换(批量必开)' reg.IgnoreCase = True ' ④ 需要忽略大小写时打开Dim 源文本 As String源文本 = "要处理的文本" ' ⑤ 原始文本源文本 = reg.Replace(源文本, "替换成的内容") ' ⑥ 执行替换,接住结果MsgBox 源文本 ' ⑦ 看效果End Sub
🔑 必须先懂:分组与 $1、$2
正则里用 ( ) 把一部分「圈」成一个分组,替换时就能用 $1、$2、$3… 把圈住的内容「原样搬」到新位置。这是正则替换最强大的地方。
规则:(前3位)(中间4位)(后4位)
替换:$1****$2 → 只保留头尾,中间盖住
三、什么时候该用它?(4 大场景)
🛡️ 1. 打码脱敏
手机号、身份证、银行卡中间几位变 *,保护隐私又能识别归属。
📅 2. 格式统一
日期、分隔符写法五花八门,一键统一成年-月-日。
🧹 3. 清洗整理
多余空格、全角半角混排、乱糟糟的备注,一键变整齐。
🔁 4. 批量替换
凡是「有规律」的文本改造,几百上千行也能一次搞定。
四、3 个案例(由简到繁,逐句解析)
案例 1 | 手机号打码(最简单,学会分组)
需求:把 11 位手机号中间 4 位盖成 ****,头和尾保留。
① 完整代码(直接复制可用)
Sub 手机打码()Dim reg As ObjectSet reg = CreateObject("VBScript.RegExp")reg.Pattern = "(\d{3})\d{4}(\d{4})"reg.Global = TrueDim s As Strings = "我的手机号13812345678,备用15900001111"s = reg.Replace(s, "$1****$2")MsgBox sEnd Sub
② 逐句拆解(别跳过,这里才是重点)
Dim reg As Object声明一个对象变量 reg,专门用来装「正则引擎」。
Set reg = CreateObject("VBScript.RegExp")真正「造」出正则对象。CreateObject 不需要提前引用任何库,最省事,新手首选。
reg.Pattern = "(\d{3})\d{4}(\d{4})"核心规则。\d=一个数字;\d{3}=连续3个数字;(\d{3})加括号=把前3位「圈」成第1分组($1);中间\d{4}不括号=只匹配不保留;(\d{4})=后4位,第2分组($2)。整句意思:匹配11位手机号,并记住头3位和尾4位。
reg.Global = TrueTrue=所有匹配都换;批量处理一定要开,否则只会找到的第一个。
Dim s As String / s = "我的手机号..."准备字符串变量,放入原始文本。
s = reg.Replace(s, "$1****$2")执行替换。$1是第1分组(前3位),$2是第2分组(后4位),中间写死的 **** 盖住那4位。Replace 不会改原文本,而是把结果返回,所以要用 s = 接住。
MsgBox s弹窗看结果:138****5678,159****1111。
案例 2 | 日期格式统一(学会字符组 [ ])
需求:把「2026.10.21 / 2026/11/01 / 2027年1月5日」统一成「年-月-日」。
① 完整代码
Sub 规范日期()Dim reg As ObjectSet reg = CreateObject("VBScript.RegExp")reg.Pattern = "(\d{4})[./年-](\d{1,2})[./月-](\d{1,2})日?"reg.Global = Truereg.IgnoreCase = TrueDim s As Strings = "签约日2026.10.21,生效日2026/11/01,到期日2027年1月5日"s = reg.Replace(s, "$1-$2-$3")MsgBox sEnd Sub
② 逐句拆解
reg.Pattern = "(\d{4})[./年-](\d{1,2})[./月-](\d{1,2})日?"(\d{4}) 年(4位,分组$1);[./年-] 方括号=字符组,匹配「其中任意一个」:点.、斜杠/、年、-,所以通吃各种分隔写法;(\d{1,2}) 月(1~2位,分组$2);[./月-] 又一组字符组:.、/、月、-;(\d{1,2}) 日(1~2位,分组$3);日? 末尾「日」字可选(?=出现0或1次),有就匹配、没有也行。
reg.IgnoreCase = True本例用不到大小写,但加上无害;处理 a/A 混写时才真正需要。
s = reg.Replace(s, "$1-$2-$3")把三种写法统一成「年-月-日」。结果:2026-10-21,2026-11-1,2027-1-5。
案例 3 | 杂乱空格清理(学会 \s 与全角,稍复杂)
需求:把半角、全角空格混在一起的一堆空格,整理成「每个词之间只有一个普通空格」。
① 完整代码
Sub 清理空格()Dim reg As ObjectSet reg = CreateObject("VBScript.RegExp")reg.Pattern = "[\s ]+"reg.Global = TrueDim s As Strings = "张 三 男 28 岁"s = reg.Replace(s, " ")s = Trim(s)MsgBox sEnd Sub
② 逐句拆解
reg.Pattern = "[\s ]+"\s = 任意空白:半角空格、Tab、换行都算; = 中文全角空格(占一个汉字宽),它不在 \s 范围内,所以单独贴进方括号;[...] 字符组,+ = 前面元素出现1次或多次。于是连成一堆的空格(半角全角混排)会被当成一个整体。
s = reg.Replace(s, " ")把这些「一堆空格」整体换成一个普通半角空格。
s = Trim(s)再去头去尾的多余空格,得到干净结果:张 三 男 28 岁。
五、新手避坑指南(4 个最常见错误)
❌ 坑1:对象名拼错
必须写 "VBScript.RegExp",字母要对,否则报错「ActiveX 部件不能创建对象」。
❌ 坑2:忘了 Global = True
默认只换第一个匹配,批量处理会漏掉一大片。记住:批量必开。
❌ 坑3:分组引用写错
VBA 里要用 $1、$2,不要写 \1,替换串里不认反斜杠写法。
❌ 坑4:规则太死匹配不到
先用一小段文本 + MsgBox 测试;多用字符组 [ ] 和 + / * 让规则更「宽容」。
六、小结 & 领练习文件
今天你学会了
✅ 正则 Replace = 按规则批量「找+换」文本
✅ 四件套:Pattern / Global / IgnoreCase / Replace
✅ 分组 ( ) 与 $1、$2 引用是灵魂
✅ 3 个案例:打码 / 日期统一 / 空格清理
📥 配套 Excel 练习文件已备好
里面含 3 个案例的「原始数据 + 替换结果 + 完整 VBA 源码」,照着练一遍就稳了。















































































