Excel VBA正则表达式保留数字与点号的代码实现问题咨询
Excel VBA正则删除单元格非数字和点号内容的问题修复
首先你写的正则表达式多了个多余的右括号,正确的应该是 [^.0-9]+,这是导致匹配异常的核心问题之一。下面分别修复两段代码:
第一段代码的问题与修复
原代码的问题:
- 正则末尾多了
),匹配规则错误 - 用
Execute获取匹配到的内容,这不是你要的“删除非目标内容”逻辑,应该用Replace把匹配到的内容替换为空 - 要是单元格里没有匹配内容,
test(0).Value会直接报错
修复后的代码:
Sub RegexDelete() Dim text As String Dim regEx As Object text = ActiveCell.Value Set regEx = CreateObject("VBScript.Regexp") regEx.Global = True regEx.Pattern = "[^.0-9]+" ' 去掉多余的右括号 ' 替换掉所有非数字和点的内容,输出结果 text = regEx.Replace(text, "") MsgBox text ' 要是想把结果写回单元格,加下面这行 ' ActiveCell.Value = text End Sub
第二段代码的问题与修复
原代码的问题:
- 同样正则末尾多了
) - 用了
Dim regEx As New RegExp这种早期绑定写法,但没引用正则库,所以触发“User-defined type not defined”错误;要么手动加引用,要么改用后期绑定(推荐,不用手动操作引用)
修复后的后期绑定版本(无需额外设置):
Sub simpleRegex() Dim strPattern As String: strPattern = "[^.0-9]+" ' 去掉多余的右括号 Dim strReplace As String: strReplace = "" Dim regEx As Object ' 改用后期绑定声明 Dim strInput As String Dim Myrange As Range Set Myrange = ActiveSheet.Range("A1") Set regEx = CreateObject("VBScript.Regexp") ' 创建正则对象 If strPattern <> "" Then strInput = Myrange.Value With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With ' 直接替换后输出,不用先判断匹配,没匹配的话会返回原内容 MsgBox regEx.Replace(strInput, strReplace) ' 要写回单元格就加这行 ' Myrange.Value = regEx.Replace(strInput, strReplace) End If End Sub
如果非要用早期绑定,得这么操作:
- 打开VBA编辑器,点
工具→引用 - 找到并勾选
Microsoft VBScript Regular Expressions 5.5,点确定 - 这时就能保留
Dim regEx As New RegExp的写法,同时把正则表达式改对就行
内容的提问来源于stack exchange,提问作者Bkviegas
相关产品推荐
相关产品推荐

