打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA之正则表达式(7)

实例需求:数据保存在A列中,数据组之间使用全角逗号分隔,重整后需要将每组数据开始的圆括号部分移动到末尾,并合并相同的全角方括号内容。貌似这个需求有些拗口,实际效果见B列。


示例代码如下。

Sub RegExpReOrg()    Dim strTxt As String, strKey As String    Dim objRegEx As Object, objMatch As Object    Dim objMH As Object, c As Range, rngData As Range    Dim dic As Object, k    Set objRegEx = CreateObject("vbscript.regexp")    Set dic = CreateObject("scripting.dictionary")    objRegEx.Pattern = "(\(\d+\))(【.+?】)(.*?),"    objRegEx.Global = True    Set rngData = Range([A2], Cells(Rows.Count, "A").End(xlUp))    rngData.Offset(0, 1).ClearContents    For Each c In rngData        strTxt = Application.Clean(c.Value) & ","        Set objMatch = objRegEx.Execute(strTxt)        If objMatch.Count > 0 Then            dic.RemoveAll            For Each objMH In objMatch                strKey = objMH.submatches(1)                If dic.exists(strKey) Then                    dic(strKey) = dic(strKey) & "," & objMH.submatches(2) & objMH.submatches(0)                Else                    dic(strKey) = objMH.submatches(2) & objMH.submatches(0)                End If            Next            strTxt = ""            For Each k In dic.Keys                strTxt = strTxt & Chr(10) & k & dic(k)            Next            c.Offset(0, 1) = Mid(strTxt, 2)        End If    Next    Set objMH = Nothing    Set objMatch = Nothing    Set objRegEx = NothingEnd Sub

【代码解析】
第6行代码使用后期绑定创建字典对象。
第7行代码使用后期绑定创建正则对象。
第8行代码指定正则匹配字符串。

匹配模式含义submatches序号
(\(\d+\))匹配圆括号包裹的至少1位数字,此处圆括号需要使用反斜杠进行转义0
(【.+?】)匹配全角方括号及其之中的内容,作为字典对象的Key1
(.*?)匹配“】”之后的字符,使用非贪婪匹配2
匹配每组数据末尾的全角逗号-

第9行代码指定数据区域。
第10行代码清空B列单元格。
第12行代码第31行代码循环处理工作表A列中的数据。
第13行代码读取单元格内容并在末尾添加一个全角逗号,便于正则匹配
第14行代码执行正则匹配。
如果匹配成功,那么第17行到第24行代码使用For循环结构整理数据。
第16行代码清空字典。
第18行代码获取字典的键值。
第19行到第23行代码如果字典中存在相同键值,就将相应的字符组合后保存在字典中,如果不存在,则添加键值对。
第26行到第28行代码按照多行格式整理数据。
第29行代码将数据写入B列单元格。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA之正则表达式(3)-- 特殊公式计算
这个超牛逼的求和公式,请速收藏起来!
从分组加深对正则表达式的认识
asp 图片正则替换
看完这篇,如果你还不懂VBA字典,那我就没办法了
一道数据拆分难题,函数半天搞不定,VBA却一分钟解决问题!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服