Usare la Funzione SOMMA col VBA. - dal 04/09/04 pagina vista: volte

Un esercizio sul come ottenere una Somma di una colonna di valori. Come già detto in tante altre occasioni, Excel vuole che si identifichino la cella o la zona (Range di celle) su cui applicare un'istruzione quando si lavora con formule o funzioni sul foglio di lavoro, lo stesso dicasi quando si usano istruzioni in codice vba. Vediamo sotto un esempio di una ipotetica tabella, della quale vorremmo la somma dei valori della colonna E:

Ovviamente diamo per scontato che basterebbe inserire in E21 (o in qualsiasi altra cella, magari la E1), la funzione =SOMMA(E4:E20), ma il nostro scopo è quello di articolare soluzioni basate su istruzioni in vba, tenendo conto del fatto che potremmo non conoscere la lunghezza del nostro elenco. Useremo quindi End per reperire "dinamicamente" l'ultima cella occupata che formerà il nostro elenco, e lo faremo cercando l'ultima cella della colonna con i valori, cioè la colonna E. Per applicare la funzione SOMMA useremo il metodo WorksheetFunction (già presentato sull'altro sito, sezione vba, articolo "Funzioni Foglio in Vba")

Vediamo le istruzioni:

Sub Sommamia()

'con "zona" impostiamo appunto tutta l'area che va dalla cella E4 alla fine, qualunque essa 'sia, in questo caso E20
Set zona = Range([E4], [E4].End(xlDown))
[E4].End(xlDown).Select
'ora selezioniamo l'ultima cella occupata nella colonna E, 'partendo dalla E4.

'e nella cella sottostante (Offset(1, 0)), che sarà vuota, inseriamo con WorksheetFunction 'la funzione SOMMA (in inglese Sum)
ActiveCell.Offset(1, 0) = WorksheetFunction.Sum(zona)

End Sub

E' evidente che la funzione Somma potremo inserirla in qualsiasi cella vorremo, per esempio a inizio tabella, nella cella E1, in questo caso l'istruzione richiederà meno righe d'istruzione:

Sub Sommamia()

Set zona = Range([E4], [E4].End(xlDown))

[E1] = WorksheetFunction.Sum(zona)

End Sub

Proseguendo con gli esempi, sarà possibile impostare istruzioni per ottenere totali (Somme) di valori legati ai vari campi della tabella: una sorta di SOMMA.SE personalizzata. Potremo volere la somma di valori legati ad una categoria, oppure ad un nome, o ancora ad una data. In tutti questi casi dovremo come sempre reperire l'area che contiene i dati di cui vogliamo sommare i valori correlati, in questo esempio impostata sulla chiave "Data"e useremo la procedura vista prima:

  • Set zona = Range([B4], [B4].End(xlDown))

useremo poi un totalizzatore che, inizializzato a zero, ci consentirà di sommare i valori relativi alla chiave cercata. Per questo useremo un ciclo For Each...Next, che ricerchi la chiave nella colonna che avremo scelto, impostando la condizione di verifica con If (Se). Vediamo le istruzioni,:

Sub Sommamiase()
Dim Cel As Object

'ora impostiamo con "zona" l'area (il campo Data, colonna B) che useremo per ricercare 'la data di cui ci interessa ottenere il totale.
Set zona = Range([B4], [B4].End(xlDown)) 
tot = 0
 'con tot inizializziamo il contatore
For Each Cel In zona
 'quindi iniziamo il ciclo: per ogni cella in "zona"

'qui sotto impostiamo la condizione da verificare, in questo caso: se il valore nella cella è 'uguale o inferiore alla data odierna (Date), allora
If Cel.Value <= Date Then

'incrementiamo il totalizzatore col valore che si trova sulla stessa riga, 3 colonne a destra 'della cella in quel momento controllata
tot = tot + Cel.Offset(0, 3).Value
End If 
 'finisce la condizione da controllare
Next
 'si passa alla cella successiva per rieseguire il controllo

'poi si può scegliere se scrivere il totale così ottenuto alla fine della colonna "Importo"
[E4].End(xlDown).Select
ActiveCell.Offset(1, 0) = tot

'oppure usare una cella a piacere per avere il totale. la riga sotto serve ad impostare il 'formato cella che ospiterà il totale. a numero con due decimali
[G8].NumberFormat = "#,###.##"
[G8] = tot
End Sub

Potremo quindi, variando il range da assegnare a "zona", scegliere in campo di cui ottenere i totali, e lavorando sulle "condizioni", impostare la chiave di verifica. E' possibile usare delle variabili tramite InputBox, da usare come chiavi di ricerca; i siti sono ricchi di esempi su come fare.

 

Buon lavoro.

prelevato sul sito www.ennius.altervista.org