作者:绿色风
分类:
时间:2022-08-17
浏览:148
楼主 kevinchengcw |
Q: 如何用正则提取字符串中的金额(以"元"为单位)并进行累加? A: 利用正则表达式可以方便的提取字符串中有指定特征的数值串,并进行累加,输出结果,下面是示例代码:
- Sub test()
- Dim RegEx, mMatch, Matches
- Dim N%, I#
- Set RegEx = CreateObject("vbscript.regexp") '创建正则项目
- With RegEx '设置正则项目规则
- .Global = True '全程有效
- .MultiLine = True '多行有效
- .Pattern = "[\d.]+元" '匹配规则为:数字或带点的数字后面跟“元”字的字符串
- End With
- For N = 2 To Cells(Rows.Count, 1).End(3).Row '循环A列单元格
- Set Matches = RegEx.Execute(Cells(N, 1).Value) '用正则提取单元格中的匹配项
- I = 0 '初始化记数值为0
- For Each mMatch In Matches '循环得到的各匹配项
- I = I + Val(Replace(mMatch.Value, "元", "")) '将当前匹配项替换掉“元”后转换为数值进行累加
- Next mMatch
- Cells(N, 2) = I '将累加后的结果输出到B列当前行单元格中
- Next N
- End Sub
附示例文件。 汇总.rar |
2楼 豆丁 |
省一个替换 Sub test() Dim RegEx, mMatch, Matches Dim N%, I# Set RegEx = CreateObject("vbscript.regexp") '创建正则项目 With RegEx '设置正则项目规则 .Global = True '全程有效 .MultiLine = True '多行有效 .Pattern = "[\d.]+(?=元)" '匹配规则为:数字或带点的数字后面跟“元”字的字符串 End With For N = 2 To Cells(Rows.Count, 1).End(3).Row '循环A列单元格 Set Matches = RegEx.Execute(Cells(N, 1).Value) '用正则提取单元格中的匹配项 I = 0 '初始化记数值为0 For Each mMatch In Matches '循环得到的各匹配项 I = I + Val(mMatch) '将当前匹配项替换掉“元”后转换为数值进行累加 Next mMatch Cells(N, 2) = I '将累加后的结果输出到B列当前行单元格中 Next N End Sub |
3楼 liuguansky |
VAL直接取前数字。如果第一个是文本就返回0 |
4楼 bluexuemei |
学习! |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一