在 Excel 单元格中的文本中添加值

在 Excel 单元格中的文本中添加值

我有一张包含 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(以将其视为美分而不是欧元)。

希望这可以帮助!

相关内容