Sommare ed eliminare righe uguale



  • Sommare ed eliminare righe uguale
    di asdrubale87 data: 02/10/2015 09:58:48

    Buongiorno, è da un po che cerco di risolvere un problema con excel, ma non sono riuscito a trovare una valida soluzione:
    ho un excel dove lavoro su solo 2 colonne "A" e "B", per esempio:
    "A" "B"
    a 5
    a 3
    a 1
    b 2
    b 3
    vorrei che la macro sommasse in "B" tutte le celle che in "A" hanno lo stesso valore, fondendole in un'unica riga, ed ottenere questo risultato:

    "A" "B"
    a 9
    b 5

    Avete qualche idea per risolvere questo problema?
    sembra una scemenza, ma quando mi capitano 500/600 casi del genere in fogli di oltre 10000 righe è una gran rottura fare tutte queste operazioni a mano.
    Grazie.




  • di Marius44 data: 02/10/2015 10:07:38

    Ciao Asdrubale
    Se i tuoi dati sono in A1:B5 metti in colonna C l'elenco dei valori che vuoi sommare e in D1 la seguente formula (copiare in basso)

    =SOMMA.SE($A$1:$A$5;C1;$B$1:$B$5)

    Fammi sapere. Ciao,
    Mario



  • di asdrubale87 data: 02/10/2015 11:15:32

    questa formula è molto comoda, e si avvicina a quello che mi serve.
    ora ci vorrebbe il "colpo di genio" che mi permetta di passare questa formula in una macro che automatizzi il più possibile, così che io possa passare questa formula alle colleghe in ufficio, che di excel non ne capiscono molto...



  • di Mister_x (utente non iscritto) data: 02/10/2015 13:16:27

    ciao

    una sub() che fa queto lavoro

    le colonne in questione sono la A e la B

    ciao
     
    Option Explicit
    Sub sommaUguali()
    Dim i As Long, o As Long
    Dim ColA As Variant
    Dim ColB As Double
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    ColA = Cells(i, 1)
    ColB = Cells(i, 2)
     For o = i - 1 To 1 Step -1
       If ColA = Cells(o, 1) Then
         Cells(o, 2) = Cells(o, 2) + ColB
         Rows(i & ":" & i).Delete
         Exit For
       End If
     Next o
    Next i
    End Sub
    






  • di asdrubale87 data: 02/10/2015 15:27:31

    Mister_x Grazie!!!!!!!!!!
    era proprio quello che cercavo...anche se non capisco come faccia a funzionare...
    tipo...dove hai dichiarato che la macro deve lavorare sulle colonne A e B??
    capendo meglio questo codice vorrei farci un UserForm, così da rendere questa macro universale



  • di patel data: 02/10/2015 16:16:39

    mi sembra evidente
     
    ColA = Cells(i, 1)
    ColB = Cells(i, 2)






  • di alfrimpa data: 02/10/2015 17:56:03

    Giusto per renderla più evidente

    Cells ha due parametri: il primo indica la riga il secondo la colonna per cui se scrivo Cells(1, 1) faccio riferimento alla cella A1 e Cells(1, 2) a B1.

    Alfredo





  • di asdrubale87 data: 03/10/2015 10:10:12

    ok, allora avevo capito bene, e sono riuscito a far funzionare l'user form, grazie a tutti
     
    Sub sommaUguali()
    Dim i As Long, o As Long
    Dim ColA As Variant
    Dim ColB As Double
    For i = Cells(Rows.Count, TextBox1).End(xlUp).Row To 1 Step -1
    ColA = Cells(i, TextBox1)
    ColB = Cells(i, TextBox2)
     For o = i - 1 To 1 Step -1
       If ColA = Cells(o, TextBox1) Then
         Cells(o, TextBox2) = Cells(o, TextBox2) + ColB
         Rows(i & ":" & i).Delete
         Exit For
       End If
     Next o
    Next i
    
    End Sub



  • di asdrubale87 data: 03/10/2015 12:14:20

    e se volessi aggiungere da quale riga far partire la macro? utilizzando una TextBox?



  • di asdrubale87 data: 05/10/2015 14:26:33

    ok, ho risolto da solo, grazie a tutti per le risposte.
    posto il codice, se dovesse servire a qualcun'altro
     
    Sub sommaUguali()
    Dim i As Long, o As Long
    Dim ColA As Variant
    Dim ColB As Double
    For i = Cells(Rows.Count, TextBox1).End(xlUp).Row To TextBox3 Step -1
    ColA = Cells(i, TextBox1)
    ColB = Cells(i, TextBox2)
     For o = i - 1 To 1 Step -1
       If ColA = Cells(o, TextBox1) Then
         Cells(o, TextBox2) = Cells(o, TextBox2) + ColB
         Rows(i & ":" & i).Delete
         Exit For
       End If
     Next o
    Next i
    
    End Sub



  • di Mister_x (utente non iscritto) data: 05/10/2015 16:24:22

    ciao

    nella tua sub() manca ancora un parametro di riferimenti nel secondo ciclo For
    For o = i - 1 To 1 Step -1

    in quanto devi fermare anche questo ciclo alla stassa riga di For i
    For o = i - 1 To TextBox3 Step -1

    ciao






  • di asdrubale87 data: 06/10/2015 13:54:23

    Grazie Mister_x, non ci avevo fatto caso, anche perchè la macro funzionava bene lo stesso



  • di mb data: 06/10/2015 21:58:17

    gentilissimo asdrubale87

    desideravo chiederti un piacere, sarà l'età o l'ora ho provato a creare una userform con 3 textbox, ma forse non ho capito bene ma non riesco a far funzionare la tua sub

    ti sarei veramente grato se potessi postare unfile d'esempio pr poterlo studiare meglio

    grazie



  • di asdrubale87 data: 07/10/2015 12:41:50

    ho appena caricato il file d'esempio che ho usato per creare la macro.
    così pare che funzioni bene, spero possa essere utile anche ad altri



  • di mb data: 07/10/2015 12:58:14

    1.00000000000000 grazie

    stavo proprio provando a ricreare la situazione che avevi riportato

    vado a studiare