我有一张包含 7895 行的 Excel 表,其中 BI 列中有 6 列的值,如下:
Classification 124: Item 1 (€2345,70) item 2 (€123) item 3 (€1456,75)
我想要做的是创建一个公式或函数,将 2345,70+123+1456,75 相加。
我发现了类似的东西:
Function SumNums(rngS As Range, Optional strDelim As String = " ") As Double
Dim vNums As Variant, lngNum As Long
vNums = Split(rngS, strDelim)
For lngNum = LBound(vNums) To UBound(vNums) Step 1
SumNums = SumNums + Val(vNums(lngNum))
Next lngNum
End Function
我尝试过使用这个例程,但它在我的特定情况下不起作用。我必须找到一种方法,使添加的数字像 (€2345,70) 一样带有括号和欧元符号。但同样,这些数字有欧元符号,但它们没有被格式化为货币。
答案1
尝试以下公式(将其添加到 VBA 编辑器中的模块 - Alt+ F11)
Function SumAllCurrencies(CellsToSum)
Dim regexPattern: regexPattern = "€(\d*),?(\d*)?"
Dim objRegex: Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = regexPattern
End With
Dim regexMatches: Set regexMatches = objRegex.Execute(CellsToSum.Value)
Dim regexMatch
Dim sumValue: sumValue = 0
For Each regexMatch In regexMatches
sumValue = sumValue + regexMatch.SubMatches.Item(0)
If (IsNumeric(regexMatch.SubMatches.Item(1))) Then
sumValue = sumValue + (regexMatch.SubMatches.Item(1) / 100)
End If
Next
SumAllCurrencies = sumValue
Set regexMatch = Nothing
Set objRegex = Nothing
Set regexMatches = Nothing
End Function
然后简单地调用它=SumAllCurrencies(A1)
它的工作原理是使用正则表达式去除 € 符号后的任何数字以及逗号后的任何可选数字。然后,它将 € 符号后的所有数字相加,并将逗号后的数字相加,除以 100(以将其视为美分而不是欧元)。
希望这可以帮助!