Filtrando por moeda no Excel

1

Eu tenho essa situação no Microsoft Excel:

Dados

As células são formatadas usando "Formatar células" e definindo a moeda manualmente para cada célula. Então, eles não são cordas simples. Gostaria de somar a filtragem por moeda. Isso é possível? Quão?

Obrigado.

Lorenzo-s
fonte

Respostas:

2

VBA

Como você usou a opção "format" para formatar essas células, a formatação não está contida no valor da célula, portanto, precisaremos definir uma função no VBA. Coloque isso ( fonte ) em um novo módulo:

Public Function sumFormats(rng As Range) As String
Application.Volatile
Dim cell As Range, dblDollar#, dblPound#
dblDollar = 0: dblPound = 0
For Each cell In rng
If Len(cell.Value) > 0 Then
If Left(cell.Text, 1) = "$" Then
dblDollar = dblDollar + cell.Value
Else
dblPound = dblPound + cell.Value
End If
End If
Next cell
sumFormats = "Sum of currency: $" & dblDollar & "; Sum of Pounds: " & ChrW(163) & dblPound
End Function

Em seguida, use a nova função =sumFormats(A1:A20)para qualquer célula que você queira e ela lhe dará as somas em uma linha. Se você precisar de subtotais em linhas diferentes, precisaremos modificar a saída da função.


Não-VBA

Se você não quiser mexer com o VBA, precisará de uma coluna auxiliar ao lado dos números. Nessa coluna use a função =cell("format",A1)e isso retornará ,2para £ e C2para $. Em seguida, execute uma =sumiffunção para os subtotais.

=sumif(helpcolumncell,"C2",currencycell)a soma de dólares, e substituir C2com ,2a libras. Você sempre pode ocultar a coluna de ajuda se não gostar dela. Nesse caso, assumiremos que seus dados estão na Coluna B e o ajudante é Coluna C.

A             B    C

             Data  Format
              $1    =cell("format",B2) = C2
              £2    =cell("format",B3) = ,2  
              £3    =cell("format",B4) = ,2
              $4    =cell("format",B5) = C2 
sum dollar =sumif($C$2:$C$4,"C2",$B$2:$B$4) = 5

sum pound  =sumif($C$2:$C$4,",2",$B$2:$B$4) = 5

Em seguida, você precisará formatar essas células de soma para obter o sinal de moeda ou adicionar uma =concatenate("$"&sumif(...))função

Raystafarian
fonte
Eu tentei os dois métodos. Com o VBA eu sempre acabo no bloco ELSE (libra) para cada célula. Usando o método não-VBA, =cell("format",A1)retorna sempre 2...
lorenzo-s
você mudou os intervalos de células para seus intervalos, certo? E você usou formatos de moeda por definição? Estes dois trabalham quando eu usá-los, vamos descobrir a diferença
Raystafarian
Eu estou usando € e HKD.
Lorenzo-s
Não sei porquê, mas o Excel coloca um espaço vazio (ASCII 32) antes do símbolo monetário. Então, os valores das células são algo como ␢€␢1234.56. Então eu usei em Mid(cell.Text, 2, 1)vez de Left(cell.Text, 1)no código do VBA, e resolvi. Obrigado.
Lorenzo-s
Que bom que você descobriu!
Raystafarian