Somma tabellare

  • 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