Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

VBA: somma di colonne separate da riga vuota

Ultimo Aggiornamento: 27/09/2020 13:17
Post: 13
Registrato il: 07/10/2019
Età: 31
Utente Junior
2013
OFFLINE
26/09/2020 15:50

VBA: somma di colonne separate da riga vuota
Ciao a tutti,

ho delle colonne di valori da sommare. Le colonne sono di diversa lunghezza (anche un solo valore) e sono disposte una sotto l'altra separate da una riga vuota. La somma va inserita nella riga vuota tra una e l'altra colonna
Non conoscendo il numero di valori da sommare (il numero potrebbe cambiare a seconda di altri dati) mi occorre farlo tramite una macro in VBA. Riporto di seguito il codice che ho scritto per fare la somma della prima colonna, sapendo che parte sempre da F3, tuttavia ho difficoltà a ripetere questo procedimento per i successivi valori fino all'ultimo valore indicato. Potreste aiutarmi?
In allegato il file

Sub ComputeSum()

Dim sum As Double
Dim sumPerc As Double

' somma
Range("E3").Select
Range(Selection, Selection.End(xlDown)).Select
sum = WorksheetFunction.sum(Selection)
Selection.End(xlDown).Activate
ActiveCell.Offset(1, 0).Value = sum
' somma %
Range("f3").Select
Range(Selection, Selection.End(xlDown)).Select
sumPerc = WorksheetFunction.sum(Selection)
Selection.End(xlDown).Activate
ActiveCell.Offset(1, 0).Value = sumPerc

End Sub
[Modificato da Fabiogio92 26/09/2020 15:51]
Post: 837
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
OFFLINE
26/09/2020 18:29

Ciao
Ti ricordo che il codice, per una migliore lettura, va scritto fra i TAGCODE, cioè cliccando sul pulsante in basso " "
Ciò detto, prova con la seguente macro
Sub Sum_Try()
Dim ur As Long, i As Long, a As Long
ur = Cells(Rows.Count, 10).End(xlUp).Row
For i = 4 To ur
  If Cells(i + 1, 10) <> "" Then
    a = Range("J" & i).End(xlDown).Row
    somma = "(J" & i & ":J" & a & ")"
    Range("J" & a + 1).FormulaLocal = "=SOMMA" & somma
    i = a + 1
  ElseIf Cells(i + 1, 10) = "" Then
    Range("J" & i + 1) = Range("J" & i)
    i = i + 1
  End If
Next i
End Sub

Tieni presente che la macro mette il totale dove trova la cella vuota e, pertanto, la seconda volta ti dà il totale dell'intera colonna.
Per quanto riguarda le percentuali, studiaci un po' tu (al caso scrivi).

Fai sapere. Ciao,
Mario

PS - ho fatto le prove sulla colonna J
[Modificato da Marius44 26/09/2020 18:34]
Post: 2.328
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
26/09/2020 19:15

ciao

ti allego il tuo file con la sub() inserita nel foglio


Option Explicit
Sub Subtotale_()
Dim i As Long, ncol As Long
Dim Rip As Double
Rip = 0
For ncol = 5 To 6
For i = 3 To Cells(Rows.Count, ncol).End(xlUp).Row + 1
If Cells(i, ncol) <> "" Then
Rip = Rip + Cells(i, ncol).Value
Else
Cells(i, ncol) = Rip
With Cells(i, ncol)
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
Rip = 0
End If
Next i
Next ncol
End Sub



Ciao da locate
excel 2007 / 13
Post: 13
Registrato il: 07/10/2019
Età: 31
Utente Junior
2013
OFFLINE
27/09/2020 13:17

locatevaresino, 26/09/2020 19:15:

ciao

ti allego il tuo file con la sub() inserita nel foglio


Option Explicit
Sub Subtotale_()
Dim i As Long, ncol As Long
Dim Rip As Double
Rip = 0
For ncol = 5 To 6
For i = 3 To Cells(Rows.Count, ncol).End(xlUp).Row + 1
If Cells(i, ncol) <> "" Then
Rip = Rip + Cells(i, ncol).Value
Else
Cells(i, ncol) = Rip
With Cells(i, ncol)
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
End With
Rip = 0
End If
Next i
Next ncol
End Sub




Ciao,
grazie mille funziona perfettamente.
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 02:30. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com