永发信息网

如何在Excel VBA 中使用正则表达式

答案:3  悬赏:50  手机版
解决时间 2021-01-26 06:36
  • 提问者网友:锁深秋
  • 2021-01-25 22:37
如何在Excel VBA 中使用正则表达式
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-01-25 22:44
正则表达式进行模糊替换的例子代码:
Sub TestReplace()
Dim ss, re, rv 

ss = "12苏5a中国人民一二d三"& vbNewLine &"egg其d中国人民四a1五六"& vbNewLine&"凡dsf事都美国纽约AAFa分"& vbNewLine&"发的事都美国纽约A分Fa分" & vbNewLine     
Set re = New RegExp 
re.Pattern = "^\S+(中国人民|美国纽约)\S+$"     
re.Global = True     
re.IgnoreCase = True     
re.MultiLine = True 
rv = re.Replace(ss, "$1")     
MsgBox rv 

End Sub
全部回答
  • 1楼网友:何以畏孤独
  • 2021-01-25 23:17
1 新建一个空白工作簿,在工作表界面按下组合快捷键Alt+F11或者右键单击任意一个工作表标签,在弹出的右键快捷菜单单击“查看代码”进入VBA编辑环境,如下图所示: 如何在Excel VBA 中使用正则表达式? 2 在“代码窗口“中复制粘贴以下代码: Sub RegTest() '定义正则表达式对象 Dim oRegExp As Object '定义匹配字符串集合对象 Dim oMatches As Object '创建正则表达式 '定义要执行正则查找的文本变量 Dim sText As String sText = "这是v一个正则表达式b的范例程序a代码" Set oRegExp = CreateObject("vbscript.regexp") With oRegExp '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项 .Global = True '设置是否区分大小写,True表示不区分大小写, False表示区分大小写 .IgnoreCase = True '设置要查找的字符模式 .Pattern = "[\u4e00-\u9fa5]+" '判断是否可以找到匹配的字符,若可以则返回True MsgBox .Test(sText) '对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空 Set oMatches = .Execute(sText) '把字符串中用正则找到的所有匹配字符替换为其它字符 MsgBox .Replace(sText, "") End With Set oRegExp = Nothing Set oMatches = Nothing End Sub 如下图所示: 如何在Excel VBA 中使用正则表达式? 3 执行以上代码,将把 sText = "这是v一个正则表达式b的范例程序a代码" 变量中的中文字符全部删除,将只返回"vba"3个英文字符,如下图所示。其中的.Pattern = "[\u4e00-\u9fa5]+"表示匹配所有中文字符,Pattern属性是正则表达式对象的核心,当需要执行其它查找替换时一般都只需更改Pattern属性即可。 如何在Excel VBA 中使用正则表达式? 4 一些常见的正则Pattern如下: [0-9]表示匹配任意一个数字 [a-zA-Z]表示匹配任意一个英文字母 [\u4e00-\u9fa5]表示匹配任意一个中文字符
  • 2楼网友:雾月
  • 2021-01-25 23:08
sub test()     dim arr() as string     dim oregexp as object     dim omatches as object     dim inum as integer '定义正则对象'     set oregexp = createobject("vbscript.regexp")     dim irow as integer     irow = sheets(1).usedrange.rows.count     for ind = 1 to irow         arr = split(sheets(1).cells(ind, 1).value, "*")         inum = ubound(arr) - lbound(arr)         for i = 0 to inum             with oregexp                 .global = true                 .ignorecase = true                 .pattern = "[0-9]+"                 set omatches = .execute(arr(i))             end with             sheets(1).cells(ind, i + 2).value = omatches(0)             sheets(1).cells(ind, 8).value = sheets(1).cells(ind, 8).value + cint(omatches(0))             set omatches = nothing         next     next end sub给个例子
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯