Adicionando valores entre texto em uma célula do Excel

2

Eu tenho uma planilha do Excel com 7895 linhas, 6 colunas na coluna B Eu tenho valores como:

Classification 124: Item 1 (€2345,70) item 2 (€123) item 3 (€1456,75)

O que estou tentando fazer é criar uma fórmula ou função que some 2345,70 + 123 + 1456,75.

Eu encontrei algo assim:

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

Eu tentei usar essa rotina, mas não está funcionando no meu caso específico. Eu tenho que encontrar uma maneira que os números adicionados são aqueles como (€ 2345,70) com o parêntese e o sinal do Euro. Mas, novamente, os números têm um sinal de Euro, mas não são formatados como moeda.

    
por Emanuel 12.02.2016 / 12:26

1 resposta

1

Tente a seguinte fórmula (Adicione isto a um Módulo no Editor do 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

Em seguida, basta chamá-lo com =SumAllCurrencies(A1)

Isso funciona regexando quaisquer dígitos após um sinal de € e quaisquer dígitos opcionais após uma vírgula. Em seguida, soma todos os números diretamente após o sinal de € e adiciona os números após a vírgula, divididos por 100 (para tratá-los como centavos em vez de Euros).

Espero que isso ajude!

    
por 12.02.2016 / 12:42