小半年不更新了,各种事导致更新一推再推。中间也接收到过好多朋友的催更和建议,实在惭愧。因为VBA纯属爱好,也希望大家多多给我提问题,我多解决问题,也有更多的素材。
以后更新会更加口语话,以个人的学习笔记形式给大家分享经验和心得。希望大家也能各取所需,不枉花几分钟看我的文章。
遇到一位知友的提问,在一个报销统计表中,个人的名字和需要报销的费用混杂在一起,需要求出来其中所有数字的和。具体形式如下。
excel函数对处理这方面的功能是比较弱的,尤其当数据格式很不规则的时候,会比较难。
数据这么不规则,也遭到了知友的无语吐槽。
哈哈,言归正传,既然有人这么写,那么肯定不是个例,还是要想办法解决问题。最方便快捷的方法还是VBA的正则表达式。
将如下代码写入模块中,只需要直接引用函数即可。
自定义函数代码
Function feiyong(rng As String)
Set reg = CreateObject("vbscript.regexp")
reg.Global = True
reg.Pattern = "d "
Set mat = reg.Execute(rng)
For Each m In mat
strr = strr Val(m)
Next
feiyong = strr
End Function
代码中的一个小知识点:
d 在正则表达式中表示匹配至少一个数字。通过这个规则将单元格内所有数字匹配得到并求和。
val函数 val(字符串表达式)将数字字符串换成数值。这里正则表达式匹配出来后的值是string类型,需要将其转为数字类型,然后求和。