这个超牛逼的求和公式,请速收藏起来!
与 30万 读者一起学Excel
VIP学员的问题,要根据这杂乱无章的费用明细,计算合计金额。
这真是令人头疼的问题!
不幸中的大幸,这种居然可以解决。赶紧把下面的内容收藏起来,否则下回遇到猪队友,欲哭无泪。
这是答疑老师紫色提供的方法。
=正则提取(A2,"(\d+\.?\d+|\d+)",,0)
如果不需要求和,只是将所有数字提取出来,只需将最后参数的0改成1即可。
=正则提取(A2,"(\d+\.?\d+|\d+)",,1)
再新增一行费用明细,验证一下公式。
验证OK。
这是自定义函数,点开发工具 ,VB,插入模板,将代码粘贴进去。
Option Explicit
Function 正则提取(Str As String, Optional Reg As String = "(\d+)", Optional Delimiter As String = ",", Optional 方式 = 1)
' Str 需处理的文本
' Reg 正则表达式,默认为(\d+)提取连续数字
' Delimiter 分隔符,默认为逗号,
' 方式 提取后处理方式,1表示提取后和分隔符Delimiter连接起来,默认值
' 0表示求和,注意需提取数字
Dim objRegEx As Object, objMh, i, S
Set objRegEx = CreateObject("vbscript.regexp")
objRegEx.Pattern = Reg
objRegEx.Global = True
Set objMh = objRegEx.Execute(Str)
If objMh.Count > 0 Then
For i = 0 To objMh.Count - 1
If 方式 = 1 Then
S = S & Delimiter & objMh(i).submatches(0)
Else
S = S + Val(objMh(i).submatches(0))
End If
Next
End If
正则提取 = IIf(方式 = 1, Mid(S, 2), S)
End Function