Notifications
Clear all

Soma na última linha de forma dinâmica

11 Posts
4 Usuários
1 Reactions
2,003 Visualizações
PAYZZANNO
(@payzzanno)
Posts: 31
Trusted Member
Topic starter
 

Senhores, boa noite.

Por gentileza, alguém poderia me ajudar com esta questão.

Estou tentando colocar o resultado na última linha das colunas, mas, de forma dinâmica. Por vezes terá quantidade de linhas maiores ou menores de acordo com o caso.

Obrigado a todos.

Agradeço a ajuda
PAYZZANNO

 
Postado : 03/11/2020 9:36 pm
(@anderson)
Posts: 203
Reputable Member
 

@payzzanno

https://youtu.be/erW3Mj12vtc

Este post foi modificado 4 anos atrás por Anderson

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 03/11/2020 9:52 pm
PAYZZANNO
(@payzzanno)
Posts: 31
Trusted Member
Topic starter
 

Olá Anderson, mais uma vez obrigado.

Eu vi que uma solução seria a tabela. Porém, minha ideia era ter uma rotina em vba. De forma que agilizasse a prática diária.

Talvez haja alguma forma de me ajudar. Não consigo adicionar uma ou mais colunas de acordo com o caso.

Se, por gentileza, você puder me dá uma luz, fico imensamente grato.

No script abaixo aplica se apenas a coluna (A) como ponto de partida fazendo a contagem do número de linhas. A coluna (B) trazendo o resultado desejado. Como coloquei no exemplo, simples para ilustrar minha intenção, minha ideia é ter a liberdade de atribuir o número de colunas desejadas. Partindo, exatamente da contagem de linha pela coluna (A).

Veja, por gentileza, o código. Se houver possibilidade, mostre me o que não estou vendo.

 

Sub resultado()
On Error Resume Next
Dim ul As Long
Dim mystring As String
ul = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
For Each cel In ActiveSheet.Range("B2:B" & ul)
If cel.Value <> "" Then
mystring = mystring & cel.Address(0, 0) & ","
ElseIf cel.Value = "" And cel.Offset(-1, 0).Value <> "" Then
mystring = Left(mystring, Len(mystring) - 1)
cel.Offset.Value = WorksheetFunction.Sum(Range(mystring))
mystring = ""
End If
Next
End Sub

 

Busquei solução de mudança partido deste ponto. "For Each cel In ActiveSheet.Range("B2:B" & ul)"

Obrigado mais uma vez.

Agradeço a ajuda
PAYZZANNO

 
Postado : 04/11/2020 3:43 pm
(@anderson)
Posts: 203
Reputable Member
 

A tabela é mais prática, basta apertar TAB para adicionar linha na tabela.

Este post foi modificado 4 anos atrás 3 vezes por Anderson

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 04/11/2020 6:11 pm
PAYZZANNO
(@payzzanno)
Posts: 31
Trusted Member
Topic starter
 

É eu fiz isso. Porém, acumula a soma de todas as colunas.

O ideal é que, respectivamente, cada coluna tenha seu total geral.

Soma de (B:B)

Soma de (C:C)

Soma de (D:D) assim por diante.

Não consegui identificar o parâmetro para tal acontecimento.

 

Agradeço a ajuda
PAYZZANNO

 
Postado : 04/11/2020 7:11 pm
(@anderson)
Posts: 203
Reputable Member
 

@payzzanno

 

https://youtu.be/yHDdQpxcsu8

Este post foi modificado 4 anos atrás por Anderson

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 04/11/2020 8:48 pm
JSCOPA10 reacted
PAYZZANNO
(@payzzanno)
Posts: 31
Trusted Member
Topic starter
 

Peço desculpa por demorar a dá um feedback @anderson.

Agora entendi.

Muitíssimo obrigado!

 

Agradeço a ajuda
PAYZZANNO

 
Postado : 05/11/2020 4:46 pm
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

@payzzanno eu fiquei com algumas duvidas, principalmente de como irá fazer os lançamentos, o modelo do Anderson com tabela é bem prático, mas pensando em uma solução por VBA, segue a minha contribuição, como eu disse precisaria de mais detalhes para uma resposta mais precisa, lembrando que na rotina estou considerando que já temos um total na ultima linha das colunas.

 

Sub SOMAR_POR_COL()
Dim r As Range 'Range Total das colunas
Dim v As Variant 'Soma das colunas
Dim rTT As Range 'Range Total Final por colunas
Dim vTT As Variant 'Linha do Total Final por colunas
Dim ul As Long 'Ultima Linha das colunas
Dim ulTotal As Long 'Linha Total Geral
Dim ColumnLetter As String

'Ultima Coluna por numero
LastCol = Plan1.[A1].End(xlToRight).Column

'Navegamos pelas colunas iniciando pela segunda (n=2)
For n = 2 To LastCol
'Coluna pela Letra
ColumnLetter = Split(Cells(1, n).Address, "$")(1)

'Ultima linha da coluna desconsiderando a linha com total (-1)
ul = ActiveSheet.Range(ColumnLetter & Rows.Count).End(xlUp).Row - 1

'Montamos o Range das colunas para Soma
Set r = Sheets("Plan1").Range(ColumnLetter & 2 & ":" & ColumnLetter & ul)

'Soma por Colunas
v = Application.WorksheetFunction.Sum(r)
'Lançamos o Total
Range(ColumnLetter & ul + 1).Value = v

Next n

'Linha do Total por coluna
ulTotal = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row

Set rTT = Sheets("Plan1").Range("B" & ulTotal & ":" & "D" & ulTotal)

vTT = Application.WorksheetFunction.Sum(rTT)
Range("H1").Value = vTT

End Sub
 
Postado : 05/11/2020 5:24 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Um atalho que também pode interessar:

  • Posicione o cursor em qualquer lugar na área dos dados
  • CTRL + *
  • ALT + =

 
Postado : 05/11/2020 9:58 pm
PAYZZANNO
(@payzzanno)
Posts: 31
Trusted Member
Topic starter
 

Olá @coutinho tudo bem?

Desculpas por minha demora.

Obrigado por responder. A ideia era de fato atribuir a soma geral ao final da coluna identificando a última célula com dados.

E graças a vocês consegui sanar o meu problema. Eu coloquei um exemplo simples para ilustrar, de forma resumida, a questão.

Tua rotina faz em parte o que eu restava precisando. Com a diferença é que ela coloca o somatório total, das colunas somadas, na célula H1.

Também é show de bola. Muito boa mesmo. 

Obrigado mais uma vez.

Agradeço a ajuda
PAYZZANNO

 
Postado : 07/11/2020 1:41 am
PAYZZANNO
(@payzzanno)
Posts: 31
Trusted Member
Topic starter
 

Olá @edsonbr. Tudo bem?

O atalho (Alt + =) é sim uma solução, a principio, um modo de se apagar um incêndio. O pior é que eu se quer lembrava desse fato.

Porém, como eu tenho uma dinâmica bem acentuada, para o meu caso o melhor mesmo é uma rotina VBA.

Mas, de qualquer forma só tenho a agradecer a todos desse fórum que, com muito boa vontade, inteligência e eficácia, se propõe a ajudar.

Obrigado mais uma vez por dedicar um pouco do teu tempo.

 

Agradeço a ajuda
PAYZZANNO

 
Postado : 07/11/2020 1:54 am