Condividi:        

[Excel] Funzione somma con Vba

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Funzione somma con Vba

Postdi raffolo » 26/04/06 10:48

Ciao a tutti, spero che qualcuno di voi possa aiutarmi.

Mi trovo nella necessita di creare una all'interno di una macro una somma automatica di una serie di valori. Il problema per me nasce dal fatto che questi valori possono essere due o anche 10, quindi non posso utilizzare la classica formula =sum(rc:rc) perchè non mi accetta variabili al suo interno.
So che il primo valore parte dalla riga 3 della colonna b, ma l'ultimo valore (posizionato sulla stessa colonna) può essere su una qualsiasi riga.

Qualcuno può aiutarmi?
Non vorrei sembrare troppo pretenzioso ma se non chiedo troppo potreste anche spiegarmi brevissimamente il codice che avete usato,m così che posso imparare ad usarlo anche io?

Ringrazio tutti
Raffaello
raffolo
Newbie
 
Post: 3
Iscritto il: 26/04/06 10:43

Sponsor
 

Postdi mikecodadilupo » 26/04/06 12:21

ciao raffolo... il tuo problema io lo risolverei cosi...
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
Dim somma As Single
Dim risultato As Single
Set area = ActiveSheet.UsedRange
addendi = area.Rows.Count 'Conteggia il numero di righe immesse
risultato = 0 'Assegna il valore iniziale zero al risultato finale
For addendi = 0 To addendi - 1 'Inizia un ciclo di conteggio
  somma = Range("B3").Offset(addendi, 0).Value
  risultato = risultato + somma
Next
Range("B3").Offset(addendi, 0).Value = risultato 'Assegna alla celle successiva della riga il risultato totale
End Sub

dove CommandButton è un pulsante di comando. Ma puoi associare il codice ad una macro e il risultato non cambia...

quindi inizi a scrivere dei numeri su b3,b4,b5...quando finisci premi il pulsante o esegui la macro e nella riga successiva ti riporta la somma di tutti i valori precedenti.

sicuramente ci saranno dei codici piu rapidi....e i moderatori sono bravissimi in questo....
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Postdi archimede » 26/04/06 12:24

Codice: Seleziona tutto
Option Explicit
Sub test()
    Dim lastrow As Long

    ' Mi posiziono alla cella B3
    Cells(3, 2).Select
    ' Individuo l'ultima riga che contiene dati della colonna B
    lastrow = Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
    ' Aggiungo la formula che fa la somma da B3 a B<ultimarigapiena>
    Worksheets("Foglio1").Range("B" & lastrow).FormulaLocal = "=SOMMA(b3:b" & lastrow - 1 & ")"
End Sub
HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

grazie

Postdi raffolo » 26/04/06 12:28

grazie a entrambi :), ora me li studio con calma.

Ancora grazie e buona giornata
raffolo
Newbie
 
Post: 3
Iscritto il: 26/04/06 10:43

Postdi Alexsandra » 26/04/06 13:12

Io l'ho fatto con un intervallo
Codice: Seleziona tutto
Sub Somma()
Set zona = Range([B3], [B3].End(xlDown))
[B3].End(xlDown).Select
ActiveCell.Offset(1, 0) = WorksheetFunction.Sum(zona)
End Sub

Alla 1° riga seleziono la zona
nella 2° seleziono l'ultima cella
nella 3° mi sposto di una riga e metto la funzione somma
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Anthony47 » 26/04/06 17:12

Ciao Raffolo, ti aggiungo una ulteriore possibilita':

Se nella colonna B, da B3 in giu', hai solo i dati da sommare e vuoi ottenere il totale direttamente in una variabile gestibile dalla macro, inserisci:
Codice: Seleziona tutto
Set Range1 = Range("B3:B65536")
Totale = Application.WorksheetFunction.Sum(Range1)

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Alexsandra » 26/04/06 19:31

Ciao Antony
Bella anche la tua proposta,da tanto tempo non ti sentivo,torna a trovarci ogni tanto.
Ciaociao :D :D
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi mikecodadilupo » 27/04/06 10:29

studiando meglio il problema la mia soluzione non è molto buona in quanto va bene solo il primo ciclo...dato che nel secondo ciclo al totale è aggiunto il totale precedente come addendo....

è possibile fare un discorso diverso........ tipo il seguente???

in b3 e b4 ho due addendi....lascio una riga vuota e in b6 metto il risultato della somma di b3 e b4...

successivamente metto un altro addendo nella cella vuota b5 e deve accadere che b6 si cancella e in b7 ottengo la somma dei tre addendi b3,b4,b5.

poi metto un altro addendo nella cella vuota b6 e deve accadere che b7 si cancella e in b8 ottengo la somma di tutti i precedenti addendi...

in tal modo sarebbe possibile aggiungere prima del risultato finale sempre un addendo e il risutato finale stesso non sarebbe compromesso dai vari totali intermedi....

io ci sto gia studiando .....si accettano suggerimenti
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Postdi Alexsandra » 27/04/06 11:13

Questo è il codice
Codice: Seleziona tutto
Sub Somma()
Set zona = Range([B3], [B3].End(xlDown))
[B3].End(xlDown).Select
ActiveCell.Offset(2, 0) = WorksheetFunction.Sum(zona)
ActiveCell.Offset(1, 0).Select
End Sub
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi mikecodadilupo » 27/04/06 11:34

no alexandra.....in questo modo ti somma pure i totali precedenti...ad esempio se hai

1
2
3

ti darà ... 6

Ma se ora aggiungi ad esempio 4 deve risultarti

1
2
3
4

10

col tuo codice invece risulta 16.... cioè a partire dalla seconda volta che si esegue la macro deve venire cancellato il totale del ciclo precedente (nel caso nostro quel 6 della prima somma) per non essere messo nella somma dei cicli successivi
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Postdi Anthony47 » 27/04/06 11:38

Ciao, un warning sul calcolo dell' ultima riga usata fatto tramite la propieta' END: viene restituita la prima cella libera, anche se sotto ci fossero degli altri dati.
Questa situazione potrebbe portare a sovrascrivere il totale su eventuali dati utente.
Se proprio si vuole cercare l' ultima cella usata (ma a che serve trovarla??), io userei la ricerca dal basso:
.....Range("B5536").End(xlUp)....

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Alexsandra » 27/04/06 15:56

Potresti fare come dice Antony oppure usa il codice di Archimede, che ti mette la formula modifica l'ultima riga così
Codice: Seleziona tutto
Worksheets("Foglio1").Range("B" & lastrow+1).FormulaLocal = "=SOMMA(b3:b" & lastrow - 1 & ")"
e ti lascia una cella libera prima della funzione somma,se metti un valore in quella cella ti ricalcola il totale senza eseguire la macro.
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

grazie

Postdi raffolo » 04/05/06 09:27

Grazie veramente a tutti, sono senza parole, pensavo che ci fosse una sola soluzione possibile invece mi rendo conto che è tutt'altro che così, è affascinante, grazie non solo per le risposte ma anche per l'interessamento che avete saputo suscitarmi...

vi chiedo ancora un consiglio...
sapresti indicarmi un testo per iniziare a studiare questo mondo così affascinante?

grazie infinitamente a tutti quanti Sorriso
raffolo
Newbie
 
Post: 3
Iscritto il: 26/04/06 10:43

Postdi Anthony47 » 04/05/06 10:32

Io suggerisco uno dei tanti testi di Dilbert....
Poi se il bisogno persiste, in una libreria Mondadori o Feltrinelli trovi molte proposte; sfogliale e prendi quella che ti incuriosisce di piu'.

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Alexsandra » 04/05/06 10:38

Guardati questo http://marf2.uniroma1.it/grande/startvba.html poi un bel libro che trovi in qualsiasi libreria e frequenta i forum.
Ciao
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi mikecodadilupo » 05/05/06 11:13

alexandra...
bel sito quello...

ne conosci altri con degli esempi pratici e belli come questi???
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Postdi Alexsandra » 05/05/06 14:02

Tipo con esempi pratici di codice VBA ? ehh ehh ehh :lol: :lol: :lol:
Stasera te ne posto qualcuno,il link ce l'ho sul pc di casa.
Ciao
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Re: [Excel] Funzione somma con Vba

Postdi Anthony47 » 11/11/09 00:36

Rimossi messaggi impropri accodati da altro utente.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Funzione somma con Vba":


Chi c’è in linea

Visitano il forum: Marius44 e 58 ospiti