Notifications
Clear all

Somar todas as celulas com mesmo criterio via VBA

14 Posts
4 Usuários
0 Reactions
1,526 Visualizações
(@leandro_vf)
Posts: 15
Active 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
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

leandro_vf,

Boa tarde!

Veja se é assim.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 02/03/2016 10:37 am
(@leandro_vf)
Posts: 15
Active 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
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Ok.

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

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

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

Pois e. O meu tambem.

 
Postado : 02/03/2016 12:04 pm
(@osvaldomp)
Posts: 859
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

Osvaldo

 
Postado : 02/03/2016 1:04 pm
(@leandro_vf)
Posts: 15
Active 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
Fernando Fernandes
(@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

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/03/2016 1:38 pm
(@leandro_vf)
Posts: 15
Active 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: 859
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)))

Osvaldo

 
Postado : 02/03/2016 1:57 pm
(@leandro_vf)
Posts: 15
Active 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: 15
Active 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: 859
Prominent Member
 

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

Osvaldo

 
Postado : 02/03/2016 3:17 pm
(@leandro_vf)
Posts: 15
Active 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