Jump to content

Recommended Posts

Posted (edited)

Boa tarde,

Já andei às voltas e não consigo chegar a uma solução para o meu problema.

Passo a explicar:

Ficheiro Excel,

Coluna A - Coluna B

PORTUGAL - $25

ESPANHA - 25€

EUA - 356,55€

FRANÇA - $256

ESPANHA - 36€

etc

etc

Posto isto, como é que numa outra célula consigo Somar, por exemplo valores para Espanha em Euros e numa outra célula Valores para Espanha, em Dólares?

Obrigado e cumprimentos

Edited by lupum
Posted

Provavelmente tens de ter ai uma celula com a moeda e respectivo cambio para o euro

Câmbio? Não... Imagina que Portugal tem umas 50 linhas com valores formatados em Euros e umas 60 com valores formatados em Dólares. Quero "apenas" que numa célula me seja apresentada a soma dos valores em Euros para Portugal e noutra célula que me seja apresentada a soma dos valores em dólares para Portugal.

Posted

Bem, andei a inventar um bocado

Sub Button1_Click()
   Dim Linha As Integer
   Dim TotalRegistos As Integer
   Dim Procura As Integer
   Dim Encontrou As Boolean

   Dim Pais As String
   Dim Valor As Double
   Dim Formato As String

   Dim ResultadoPais() As String
   Dim ResultadoValor() As Double
   Dim ResultadoFormato() As String

   Dim ColunaPais As String
   Dim ColunaValor As String
   Dim PrimeiraLinha As Integer
   Dim ColunaResultadoPais As String
   Dim ColunaResultadoValor As String
   Dim PrimeiraLinhaResultado As Integer
   ' Origem
   ColunaPais = "A"
   ColunaValor = "B"
   PrimeiraLinha = 2
   ' Resultado
   ColunaResultadoPais = "E"
   ColunaResultadoValor = "F"
   PrimeiraLinhaResultado = 2

   TotalRegistos = 0
   Linha = PrimeiraLinha
   Do
       '
       Pais = Worksheets("Sheet1").Range("$" & ColunaPais & "$" & Linha).Value
       Formato = Worksheets("Sheet1").Range("$" & ColunaValor & "$" & Linha).NumberFormat
       Valor = Worksheets("Sheet1").Range("$" & ColunaValor & "$" & Linha).Value
       '
       If Pais = "" Then
           Exit Do
       End If

       Encontrou = False
       For Procura = 1 To TotalRegistos
           If ResultadoPais(Procura) = Pais And ResultadoFormato(Procura) = Formato Then
               ResultadoValor(Procura) = ResultadoValor(Procura) + Valor
               Encontrou = True
               Exit For
           End If
       Next
       If Not Encontrou Then
           TotalRegistos = TotalRegistos + 1
           ReDim Preserve ResultadoPais(TotalRegistos)
           ReDim Preserve ResultadoValor(TotalRegistos)
           ReDim Preserve ResultadoFormato(TotalRegistos)
           '
           ResultadoPais(TotalRegistos) = Pais
           ResultadoValor(TotalRegistos) = Valor
           ResultadoFormato(TotalRegistos) = Formato
       End If

       '
       Linha = Linha + 1
   Loop

   '
   If TotalRegistos > 0 Then
       For Procura = 1 To TotalRegistos
           '
           Worksheets("Sheet1").Range("$" & ColunaResultadoPais & "$" & (PrimeiraLinhaResultado + Procura - 1)).Value = ResultadoPais(Procura)
           '
           Worksheets("Sheet1").Range("$" & ColunaResultadoValor & "$" & (PrimeiraLinhaResultado + Procura - 1)).NumberFormat = ResultadoFormato(Procura)
           Worksheets("Sheet1").Range("$" & ColunaResultadoValor & "$" & (PrimeiraLinhaResultado + Procura - 1)).Value = ResultadoValor(Procura)
       Next
   End If

End Sub
  • Vote 1
Posted

Bemmmmmm, vou ter de testar isso no trabalho amanhã, mas... A ideia era algo via formulas... Eu a olhar para isto só apanho uns 50% do que está aí LOL

Mesmo assim, MUITO OBRIGADO pelo teu esforço e rápida resposta.

Posted

Hummm Não está a funcionar correctamente. Basicamente está a copiar os valores e não a fazer somas de valores separados por países e dentro dos países, por moeda.

Há alguma outra maneira, via formula, por exemplo?

Posted

Haaa haaaa Perdão, afinal parece estar a funcionar. Foi apenas um erro meu. Esta será uma das soluções, sim.

Obrigado, mas por curiosidade, há alguma maneira de colocara a funcionar, exclusivamente por fórmulas?

Obrigado pelo enorme esforço nelsonr.

Posted

Encontrei aqui um bom pedaço de código que faz QUASE o que preciso, mas precisava de uma ajuda...

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

Ele basicamente cria uma formula para somar os valores separados dentro de um range.

É possível alterar, por forma a que:

A1 A2 A3

PORTUGAL $3560 2522€

......

E por aí em diante? Ou seja, na A1 já estão os Países (são apenas uns 5/6 países) e à frente que me apresentasse os tais valores...

Posted

Bem, andei a inventar um bocado

Sub Button1_Click()
Dim Linha As Integer
Dim TotalRegistos As Integer
Dim Procura As Integer
Dim Encontrou As Boolean

Dim Pais As String
Dim Valor As Double
Dim Formato As String

Dim ResultadoPais() As String
Dim ResultadoValor() As Double
Dim ResultadoFormato() As String

Dim ColunaPais As String
Dim ColunaValor As String
Dim PrimeiraLinha As Integer
Dim ColunaResultadoPais As String
Dim ColunaResultadoValor As String
Dim PrimeiraLinhaResultado As Integer
' Origem
ColunaPais = "A"
ColunaValor = "B"
PrimeiraLinha = 2
' Resultado
ColunaResultadoPais = "E"
ColunaResultadoValor = "F"
PrimeiraLinhaResultado = 2

TotalRegistos = 0
Linha = PrimeiraLinha
Do
	'
	Pais = Worksheets("Sheet1").Range("$" & ColunaPais & "$" & Linha).Value
	Formato = Worksheets("Sheet1").Range("$" & ColunaValor & "$" & Linha).NumberFormat
	Valor = Worksheets("Sheet1").Range("$" & ColunaValor & "$" & Linha).Value
	'
	If Pais = "" Then
		Exit Do
	End If

	Encontrou = False
	For Procura = 1 To TotalRegistos
		If ResultadoPais(Procura) = Pais And ResultadoFormato(Procura) = Formato Then
			ResultadoValor(Procura) = ResultadoValor(Procura) + Valor
			Encontrou = True
			Exit For
		End If
	Next
	If Not Encontrou Then
		TotalRegistos = TotalRegistos + 1
		ReDim Preserve ResultadoPais(TotalRegistos)
		ReDim Preserve ResultadoValor(TotalRegistos)
		ReDim Preserve ResultadoFormato(TotalRegistos)
		'
		ResultadoPais(TotalRegistos) = Pais
		ResultadoValor(TotalRegistos) = Valor
		ResultadoFormato(TotalRegistos) = Formato
	End If

	'
	Linha = Linha + 1
Loop

'
If TotalRegistos > 0 Then
	For Procura = 1 To TotalRegistos
		'
		Worksheets("Sheet1").Range("$" & ColunaResultadoPais & "$" & (PrimeiraLinhaResultado + Procura - 1)).Value = ResultadoPais(Procura)
		'
		Worksheets("Sheet1").Range("$" & ColunaResultadoValor & "$" & (PrimeiraLinhaResultado + Procura - 1)).NumberFormat = ResultadoFormato(Procura)
		Worksheets("Sheet1").Range("$" & ColunaResultadoValor & "$" & (PrimeiraLinhaResultado + Procura - 1)).Value = ResultadoValor(Procura)
	Next
End If

End Sub

Mas pegando neste teu exemplo... Ele vai colar os valores numa determinada coluna... Se eu já tiver definida a célula, por exemplo B4 - ESPANHA, B5 - PORTUGAL, etc... Como colar as somas no local correcto? Por exemplo, Soma Dólares da Espanha - C4, Soma Euros da Espanha - D4, etc...

Se der para mim é óptimo... Andei a tentar inventar, mas...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.