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

论坛 期权论坛 期权     
VBA编程学习与实践   2019-7-8 05:59   6592   0
实例需求:
数据保存在B列,其格式为规格1*数量1+规格2*数量2+ ...
现在需要统计数量总和,如C列所示。
例如B3中明细为100*3+115*1对应的包装个数就是3+1。


示例代码如下。
  1. Sub RegExpDemo()
复制代码
  1.     Dim strTxt As String
复制代码
  1.     Dim objRegEx As Object
复制代码
  1.     Dim j As Integer
复制代码
  1.     Set objRegEx = CreateObject("vbscript.regexp")
复制代码
  1.     objRegEx.Pattern = "\d+\*"
复制代码
  1.     objRegEx.Global = True
复制代码
  1.     For Each c In Range([B2], Cells(Rows.Count, "B").End(xlUp))
复制代码
  1.         strTxt = objRegEx.Replace(Trim(c.Value), "")
复制代码
  1.         c.Offset(0, 1).Value = Application.Evaluate(strTxt)
复制代码
  1.     Next
复制代码
  1.     Set objRegEx = Nothing
复制代码
  1. End Subt
复制代码
  1. Set objRegEx = Nothing
复制代码
  1. End Sub
复制代码
【代码解析】
第5行代码使用后期绑定创建正则对象。
第6行代码指定正则匹配字符串。



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


如果使用VBA的字符串函数实现这个需求,就需要多次使用Split和Instr进行处理,示例代码使用正则替换,代码就很简洁了。
作者:taller
微软全球最有价值专家
ExcelHome技术论坛VBA版块版主
EH论坛VBA系列图书主创人
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:220
帖子:44
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP