VBA之正则表达式(3)-- 特殊公式计算

实例需求:数据保存在B列,其格式为规格1*数量1 + 规格2*数量2 + ...,现在需要统计数量总和,如C列所示。例如B3中明细为100*3+115*1对应的包装个数就是3+1

VBA之正则表达式(3)-- 特殊公式计算_第1张图片

示例代码如下。

Sub RegExpDemo()
    Dim strTxt As String
    Dim objRegEx As Object
    Dim j As Integer
    Set objRegEx = CreateObject("vbscript.regexp")
    objRegEx.Pattern = "\d+\*"
    objRegEx.Global = True
    For Each c In Range([B2], Cells(Rows.Count, "B").End(xlUp))
        strTxt = objRegEx.Replace(Trim(c.Value), "")
        c.Offset(0, 1).Value = Application.Evaluate(strTxt)
    Next
    Set objRegEx = Nothing
End Sub

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

匹配模式 含义
\d+ 至少1位数字,匹配包装规格
\* 匹配乘号,由于在正则表达式中星号具有特殊含义,因此需要使用反斜杠进行转义

第7行代码设置为全局搜索模式。
第9行代码使用正则替换,将匹配成功的字符串替换为空。
第10行代码利用工作表的函数Evaluate计算替换后的字符串表达式的值,并写入工作表中。
例如B7单元格内容如下,红色部分字符为正则匹配字符(包含星号),替换之后就成为简单的算式2+1+2,即使没有等号,也可以被函数Evaluate正确处理。

VBA之正则表达式(3)-- 特殊公式计算_第2张图片

如果使用VBA的字符串函数实现这个需求,就需要多次使用Split和Instr进行处理,示例代码使用正则替换,代码就很简洁了。


相关博文链接:
VBA之正则表达式(1)-- 基础篇
VBA之正则表达式(2)-- 批量修改公式
VBA之正则表达式(3)-- 特殊公式计算
VBA之正则表达式(4)-- 提取日期和金额
VBA之正则表达式(5)-- 中文字符
VBA之正则表达式(6)-- 设置音标格式
VBA之正则表达式(7)-- 乾坤大挪移(数据整理)
VBA之正则表达式(8)-- 重复字符分组
VBA之正则表达式(9)-- 添加千分位(1/3)
VBA之正则表达式(10)-- 添加千分位(2/3)
VBA之正则表达式(11)-- 添加千分位(3/3)

你可能感兴趣的:(VBA,Excel,正则,VBA,正则,公式,替换,计算)