Notifications
Clear all

soma por linhas com for

3 Posts
2 Usuários
0 Reactions
1,009 Visualizações
(@joanas)
Posts: 48
Eminent Member
Topic starter
 

Bom dia,

criei este codigo para fazer a soma de diversas linhas(C3:P3, C4:P4)... (não tem limite de fim) e retornar o valor na célula Q3, Q4,Q5.. etc

Dim lastrow As Long
Dim soma As Long
lastrow = Cells(Rows.Count, "C").End(xlUp).Row

For i = 0 To lastrow

soma = WorksheetFunction.Sum(Cells(3 + i, 5).Value, Cells(3 + i, 6).Value, Cells(3 + i, 7).Value, Cells(3 + i, 8).Value, _
Cells(3 + i, 9).Value, Cells(3 + i, 10).Value, Cells(3 + i, 11).Value, Cells(3 + i, 12).Value, Cells(3 + i, 13).Value, _
Cells(3 + i, 14).Value, Cells(3 + i, 15).Value, Cells(3 + i, 16).Value)

Cells(3 + i, 17).Value = soma

Next i

mas quando corro o codigo, o codigo nao para e acaba por bloquear (mas insere os valores na coluna Q).

porque razao isto acontece?

obrigada

 
Postado : 27/02/2015 5:10 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Bom, vou te dar umas dicas sobre o código:

Primeiro:
Dim soma As Long

Eu não sei o que vc está somando, mas se tiver valores altos, é melhor declarar a soma as Double (as long só vai ser bom se vc estiver somando valores pequenos

Segundo:
lastrow = Cells(Rows.Count, "C").End(xlUp).Row

Verifique esta linha (percorra o código com F9, para ver qual é a última linha q ela está pegando). Se por algum erro, ela estiver pegando uma linha muito longa, o loop pode demorar mesmo

Terceiro:
soma = WorksheetFunction.Sum(Cells(3 + i, 5).Value, Cells(3 + i, 6).Value, Cells(3 + i, 7).Value, Cells(3 + i, 8).Value, _
Cells(3 + i, 9).Value, Cells(3 + i, 10).Value, Cells(3 + i, 11).Value, Cells(3 + i, 12).Value, Cells(3 + i, 13).Value, _
Cells(3 + i, 14).Value, Cells(3 + i, 15).Value, Cells(3 + i, 16).Value)

Simplificar esta parte vai te ajudar. Em vez de mandar a função correr cada célula individualmente, use apenas 1 range. E não mande ela puxar os valores, apenas indique o range (sem o ".value")

soma = WorksheetFunction.Sum(Range(Cells(3 + i, 5), Cells(3 + i, 16)))

Cells(3 + i, 17).Value = soma

Next i

Por último, lembre que tudo o que vc fizer na planilha, em BA, vai ser aplicado em tempo real, então, evite que o excel "perca tempo" com o que interessa no momento - no caso, evite que ele dispare eventos e/ou atualize a tela à toa. Para isso, inicie o código com:

With Application
.ScreenUpdating = False
.EnableEvents = False
End with

E termine o código com:

With Application
.ScreenUpdating = True
.EnableEvents = True
End with

Se não resolver, sugiro que vc mande a planilha.

Abs

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 27/02/2015 5:26 am
(@joanas)
Posts: 48
Eminent Member
Topic starter
 

Deu certo :D Obrigada pelas dicaaas!!

 
Postado : 27/02/2015 6:09 am