Somma tabellare

Storico discussioni

Somma condizionale di Mauro
somma condizionale di Mauro
Salve ragazzi, avrei bisogno di una mano, se posso disturbarvi.
Avendo una tabella strutturata cosi':
NOME IMPORTOA IMPORTOB IMPORTOC IMPORTOD
A
B
C
A
A
B
E
F
e in ciascuna cella relativa agli importi una cifra qualsiasi, devo porter ottenere una seconda tabella di costruzione identica dove i nomi compaiano una sola volta (anche quelli ripetuti piu' volte) e nelle celle degli importi, per i nomi uguali presenti piu' volte, appaia la somma dei loro valori nelle diverse righe.
Non sono capace di costruire la macro. Mi date una mano?
Grazie

di TuoOmonimo
La cosa + semplice secondo me è usare le tabelle pivot.
Seleziona la tabella origine compresi i nomi di riga e colonna. Da menu Dati segli: rapporto tabella pivot.
Entrerai nella costruzione guidata.
Nelle prime 2 schermate premi avanti>.
Arrivato all'ultima schermata premi il tasto Layout.
Trascina il campo nome sul quadro Riga e somma dei campi importo nel quadro Dati.
Ora premi fine ed il gioco è fatto!
Ciao

di Apoben64
Ciao Mauro, aiutarti è un piacere , ma non sarebbe più semplice usare la funzione =SOMMA.SE ? In cui nel secondo foglio automaticamenre hai per qualsiasi nominativo la somma delle varie colone. L'uso di una macro comporta perlomeno l'uso di più cicli con l'istruzione in VBA " For Next " e l'inserimento di variabili con l'uso di stringhe per individuare il nome e sommare i suoi valori .
Facci sapere !

di Mauro
Ciao... grazie per la risposta.L'elenco dei nomi non è fisso ma determinato da un'altra macro che li estrapola da un altro elenco a seconda di condizioni precise. Purtroppo è proprio quello il problema: la creazione di una routine VBA, ma non ci cavo piede La formula somma.se sarebbe troppo nidificata da applicare, e poi come faccio a dirgli che deve controllare che nel range dei nomi ci siano nomi uguali e per tutti i nomi uguali deve sommare i valori delle rispettive riche, non avendo riferimenti precisi?

di Apoben64
Ciao Mauro, io penso che un esempio sia meglio di mille parole, per avere un' idea chiara, ti invito prima a guardare questi due link e vedere se fanno al caso tuo !
Fammi sapere !
http://ennius.interfree.it/vba/vba103.htm
http://ennius.altervista.org/vba/vba136.php

di Mauro
Ciao Apo. Il 2° link che hai inserito contiene un esempio molto simile a quello che devo fare io, pero' in maniera inverita. Mi spiego: li' il criterio di ricerca è dato dal concatenamento, sulla stessa riga, dei nomi contenuti nelle colonne dalla B alla E, e come risultato dà la somma dei valori contenuti nelle celle 1,2,3,ecc... della colonna A. A me serve il contrario. Provo a fare un esempio.
Questo è quello che ho:

NOME IMP1 IMP2 IMP3 IMP4 IMP5 IMP6
ANGELA 40 40 40 40 40 40
GIUSEPPE 40 40 40 40 40 40
MAURO 40 40 40 40 40 40
MAURO 50 50 50 50 50 50
MAURO 60 60 60 60 60 60
MAURO 70 70 70 70 70 70

Questo quello che vorrei ottenere:
NOME IMP1 IMP2 IMP3 IMP4 IMP5 IMP6
ANGELA 40 40 40 40 40 40
GIUSEPPE 40 40 40 40 40 40
MAURO 220 220 220 220 220 220

Ho provato a modificare la macro di quel link adattandola, ma non c'ho cavato piede

Grazie, e scusa se rompo tanto :)

di TuoOmonimo
Ho capito, le tabelle pivot vi fanno schifo...
Supponendo di avere la tabella origine su Foglio1 prima riga di intestazione e la tabella risultato su foglio2:

Sub Macro1()
Dim trovato As Boolean
Dim ComNome As String
Dim TotNome As Double
'
indi = 2
indi2 = 2
Do Until Sheets("Foglio1").Range("A" & indi).Text = ""
ComNome = Sheets("Foglio1").Range("A" & indi).Text
indi1 = 2
trovato = False
Do Until Sheets("Foglio2").Range("A" & indi1).Text = ""
If Sheets("Foglio2").Range("A" & indi1).Text = ComNome Then
trovato = True
End If
indi1 = indi1 + 1
Loop
If trovato = False Then
Sheets("Foglio2").Range("A" & indi2) = ComNome
indi2 = indi2 + 1
End If
indi = indi + 1
Loop

indcol = 2
Sheets("Foglio1").Rows("1:1").Copy
Sheets("Foglio2").Rows("1:1").Paste
Do Until Sheets("Foglio1").Cells(2, indcol).Text = ""
indriga = 2
TotNome = 0
indi = 2
Do Until Sheets("Foglio2").Cells(indi, 1).Text = ""
indriga = 2
ComNome = Sheets("Foglio2").Cells(indi, 1).Text
Do Until Sheets("Foglio1").Cells(indriga, indcol).Text = ""
If Sheets("Foglio1").Cells(indriga, 1).Text = ComNome Then
TotNome = TotNome + Sheets("Foglio1").Cells(indriga, indcol).Value
End If
indriga = indriga + 1
Loop
Sheets("Foglio2").Cells(indi, indcol) = TotNome
indi = indi + 1
TotNome = 0
Loop
indcol = indcol + 1
Loop
End Sub


Cognolato Studio © 2005