Notifications
Clear all

Somar todas as celulas com mesmo criterio via VBA

14 Posts
4 Usuários
0 Reactions
1,501 Visualizações
(@leandro_vf)
Posts: 0
New Member
Topic starter
 

Pessoal, estou com um problema. Antes de mais nada, não posso utilizar somase, pois a planilha que estou trabalhando é muito grande e o PC trava. Por isso eis a questao para solucionarmos via macro

Produto Valor SOMA
A R$ 10,00
A R$ 20,00
B R$ 23,15
C R$ 23,15
C R$ 854,40
D R$ 854,40
D R$ 854,40
D R$ 67,17
E R$ 213,32
E R$ 213,32
F R$ 346,97
F R$ 298,74

Preciso que na coluna "SOMA" apareça o somatório da coluna "VALOR", como se o RANGE do intervalo a somar variasse ate que o produto se altere.

A planilha esta anexa.

Agradeço a ajuda dos amigos.

 
Postado : 02/03/2016 8:54 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

leandro_vf,

Boa tarde!

Veja se é assim.

 
Postado : 02/03/2016 10:37 am
(@leandro_vf)
Posts: 0
New Member
Topic starter
 

leandro_vf,

Boa tarde!

Veja se é assim.

Oi Wagner,

Antes de mais nada obg pela ajuda. Seria mais ou menos isso, so que preciso que o resultado da soma que apareca seja sempre o total do produto e nao o parcial obtido na altura da linha. Uma informacao importante e que na sequencia das linhas, na hora que muda o produto nao tem possibilidade de aparecer novamente.

 
Postado : 02/03/2016 11:28 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Ok.

Entendi. Vamos aguardar, então, que alguém complemente pois o meu conehcimento é insuficiente para prosseguir.

 
Postado : 02/03/2016 12:00 pm
(@leandro_vf)
Posts: 0
New Member
Topic starter
 

Pois e. O meu tambem.

 
Postado : 02/03/2016 12:04 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Olá, Leandro.

Veja se este código atende.

Sub SomaProduto()
 Dim x As Long, k As Long
  For x = 2 To Cells(Rows.Count, 1).End(xlUp).Row
   k = Application.CountIf([A:A], Cells(x, 1))
   Cells(x + k - 1, 3) = Application.Sum(Range(Cells(x, 2), Cells(x + k - 1, 2)))
   x = x + k - 1
  Next x
End Sub
 
Postado : 02/03/2016 1:04 pm
(@leandro_vf)
Posts: 0
New Member
Topic starter
 

Ola Osvaldo!

Cara a soma ta correta, mas os valores obtidos da soma precisam se repetir em cada linha do produto.

Entende?

Com esse codigo o somatorio esta sendo incluido no ultimo produto da lista apenas.

 
Postado : 02/03/2016 1:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Proposta do colega Morel modifica; veja se auxilia/atende

Sub Somar()
Dim i As Long, j As Long, UltimaLinha As Long
Dim Soma As Double
    
    UltimaLinha = Sheets("Plan1").Cells(Cells.Rows.Count, 1).End(xlUp).Row
    If UltimaLinha < 2 Then UltimaLinha = 2
    For i = 2 To UltimaLinha
        For j = 2 To UltimaLinha
            If Range("A" & j).Value = Range("A" & i).Value Then
                Soma = Soma + CDbl(Range("B" & j).Value)
                If Range("A" & j + 1).Value <> Range("A" & i).Value Then
                    Range("C" & j).Value = CDbl(Soma) 'Format(Soma, "#,##0.00")
                Soma = 0
                End If
            End If
        Next
        Soma = 0
    Next
End Sub
 
Postado : 02/03/2016 1:38 pm
(@leandro_vf)
Posts: 0
New Member
Topic starter
 

Cara, O resultado foi o mesmo. O Somatório foi inserido apenas no ultimo produto da sequencia, ficando os demais vazios. Vou pensar em uma segunda macro para preencher os valores vazios com o resultado que voce conseguiu.

 
Postado : 02/03/2016 1:46 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Ola Osvaldo!

Cara a soma ta correta, mas os valores obtidos da soma precisam se repetir em cada linha do produto.

Substitua esta linha

Cells(x + k - 1, 3) = Application.Sum(Range(Cells(x, 2), Cells(x + k - 1, 2)))

por esta

Cells(x, 3).Resize(k).Value = Application.Sum(Range(Cells(x, 2), Cells(x + k - 1, 2)))
 
Postado : 02/03/2016 1:57 pm
(@leandro_vf)
Posts: 0
New Member
Topic starter
 

Agora foi! Tava tentando fugir de um COUNT mas parece que nao tem jeito. Acho que vai funcionar na minha aplicacao. Obrigado pela ajuda.

 
Postado : 02/03/2016 2:17 pm
(@leandro_vf)
Posts: 0
New Member
Topic starter
 

Agora foi! Tava tentando fugir de um COUNT mas parece que nao tem jeito. Acho que vai funcionar na minha aplicacao. Obrigado pela ajuda.

Em tempoÇ Quando a planilha for muito grande vai travar, em face do coUNTIF. Vou providenciar uma alternativa e posto aqui.

 
Postado : 02/03/2016 3:05 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

O que é uma "planilha muito grande" ? Quantas linhas com dados na coluna 'A' ? Como você sabe que "vai travar" ? Já testou ?

 
Postado : 02/03/2016 3:17 pm
(@leandro_vf)
Posts: 0
New Member
Topic starter
 

OI Osvaldo. Ja testei. Travou. Muito Grande refiro a quantidade de linhas, mais ou menos 800.000

 
Postado : 03/03/2016 10:57 am