Excel Forum Per condividere esperienze su Microsoft Excel

unire e sommare due righe

  • Messaggi
  • OFFLINE
    gionox
    Post: 92
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 01/04/2017 14:13
    Ciao ragazzi è possibile realizzare una macro che esegua una unione di due righe quando due campi sono uguali e sommare il risultato presente in un altro campo
    Vi allego il file con il risultato voluto.
    Grazie
  • OFFLINE
    patel45
    Post: 3.794
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 01/04/2017 16:44
    cosa mi dici per la colonna D ?
    le righe con campi uguali sono sempre consecutive ?
    [Modificato da patel45 01/04/2017 16:46]

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 92
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 01/04/2017 16:52
    La colonna D può assumere anche il valore "m" vengono unite due righe, non importa non importa.
    No, le righe con BC uguali non sono quasi mai consecutive. Dovevo specificarlo, giusto.
    Grazie dell'aiuto
  • OFFLINE
    patel45
    Post: 3.795
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 01/04/2017 17:40
    allega un file più realistico

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 93
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 01/04/2017 18:00
    Eccolo e scusa
  • OFFLINE
    gionox
    Post: 94
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 01/04/2017 18:03
    il campo D puoi tranquillamente anche lasciarlo vuoto quando avviene l'unione
    [Modificato da gionox 01/04/2017 18:03]
  • OFFLINE
    gionox
    Post: 95
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 02/04/2017 08:54
    Patel45 secondo te è possibile realizzare la mia richiesta o devo trovare qualcosa di alternativo?
    Grazie :)
  • OFFLINE
    patel45
    Post: 3.798
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 02/04/2017 09:00
    è possibile, ma hai troppa fretta

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 96
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 02/04/2017 09:15
    Grazie :)
  • OFFLINE
    patel45
    Post: 3.799
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    10 02/04/2017 09:42
    Sub SortSumDelete()
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    Set Rng = Range("A7:G" & LR)
    With ActiveWorkbook.Worksheets(1).Sort
          .SortFields.Clear
          .SortFields.Add Key:=Range( _
            "B8"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          .SetRange Rng
          .Header = xlYes
          .MatchCase = False
          .Orientation = xlTopToBottom
          .SortMethod = xlPinYin
          .Apply
    End With
    J = 8
    Direction = Cells(J, 1).Value
    Do While Direction <> ""
       Do While Cells(J + 1, "B").Value = Cells(J, "B").Value
          Cells(J, "E").Value = Cells(J + 1, "E").Value + Cells(J, "E").Value
          Cells(J, "G").Value = Cells(J + 1, "G").Value + Cells(J, "G").Value
          Rows(J + 1).Delete
       Loop
       J = J + 1
       Direction = Cells(J, 1).Value
    Loop
    End Sub


    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    federico460
    Post: 1.130
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Veteran
    365
    00 02/04/2017 09:43
    ciao

    ho usato una colonna d'appoggio
    che ho nascosto

    la B

    unica raccomandazione
    la formula non funziona se ci sono
    delle righe vuote nel range di ricerca

    in B8


    =SE(E(A8>=149;A8<=151);150;SE(O(A8=250;A8=251);250;A8))


    in A19


    =SE.ERRORE(INDICE($B$8:$B$16;AGGREGA(15;6;(RIF.RIGA($B$8:$B$16)-RIF.RIGA($B$8)+1)/(FREQUENZA(CONFRONTA($B$8:$B$16;$B$8:$B$166;0);RIF.RIGA($B$8:$B$16)-RIF.RIGA($B$8)+1)>0);RIGHE($C$8:$C8)));"")



    in C19

    =INDICE($C$8:$C$16;CONFRONTA(A19;$B$8:$B$16;0))



    in D19


    =INDICE($D$8:$D$16;CONFRONTA(A19;$B$8:$B$16;0))



    per la somma

    =SOMMA.SE($C$8:$C$16;C19;$H$8:$H$16)



    variando il range per le varie colonne

    ciao


    [SM=x423051]
    Ciao Patel

    mi hai fregato sul tempo di poco [SM=x423030]



    [Modificato da federico460 02/04/2017 09:44]
  • OFFLINE
    federico460
    Post: 1.131
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Veteran
    365
    00 02/04/2017 09:50
    una curiosità
    perché codificate con più codici
    lo stesso cavo?

    il ttr per esempio perché 3 codici ?
    [Modificato da federico460 02/04/2017 09:51]
  • OFFLINE
    gionox
    Post: 97
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 02/04/2017 10:09
    ho visto entrambe le soluzioni. Funzionano benissimo entrambe.
    Devo usare quella di Patel45 solo perchè ho la necessità che il risultato rimanga in quel range di celle.
    Grazie Grazie

    Ti rispondo subito:
    Il mio foglio è stato di esempio. Quei codice derivano dal lettore Barcode. Purtroppo esso non permette di scegliere la lunghezza "sparata" e quindi per sparare 100 metri di cavo non posso sparare 100 volte 1 metro e quindi ho dovuto realizzare dei codici diversi per ogni prodotto (cavi per lo più) così da sparare la cifra più vicina alla metratura voluta.
    Non so se ho reso l'idea
  • OFFLINE
    federico460
    Post: 1.132
    Registrato il: 10/10/2013
    Città: VICENZA
    Età: 69
    Utente Veteran
    365
    00 02/04/2017 10:26
    Ciao
    benissimo capito
    per completare il tutto


    =SE.ERRORE(INDICE($B$8:$B$16;CONFRONTA(0;INDICE(CONTA.SE($J$18:$J18;$B$8:$B$16&""););0));"")



    questa funziona anche in presenza di righe vuote

    nb

    la colonna B la puoi spostare dove vuoi
    [SM=g27827]

    ma la macro è meglio
    sai mai che qualcuno ci metta le mani [SM=g27827] [SM=g27827]
  • OFFLINE
    gionox
    Post: 98
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 02/04/2017 19:23
    Ciao Patel, scusa nuovamente il disturbo.
    Nella tua Macro c'è qualche restrizione su che file utilizzarla?
    Ti spiego, nel file che ti ho inviato funziona.
    Se la lancio in un foglio di un altro file non funziona.
    Se lo stesso foglio su cui l'ho provata (e dove non funziona) lo copio nel file che ti ho inviato, Funziona.
    Sapresti la motivazione?
  • OFFLINE
    gionox
    Post: 99
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 02/04/2017 20:13
    Patel, ti aggiorno.
    Praticamente ora parte e fa il dovere suo, però dopo esce la rondella di caricamento Windows. Penso entri in Loop, però non so il perchè
  • OFFLINE
    patel45
    Post: 3.801
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 02/04/2017 22:28
    ti avevo chiesto un file realistico, io ho costruito la macro sul foglio che tu hai allegato.

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 100
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 02/04/2017 22:53
    Scusami, io ti ho inviato un foglio del file vero.
    Adesso ti allego il file vero. Come potrai vedere il foglio "1" tranne per i numeri e per formule presenti, è identi a quello che ti ho presentato.
    Io sul foglio "1" la sequenza delle operazioni che faccio è:
    Lancio Macro: Rimuovi Duplicati
    Lancio Macro: CopiaeIncolla
    Lancio Macro: SortSumDelete.

    Se esegui anche tu questo procedimento, c'è il loop nell'ultima macro.
    Grazie e scusa se non ti ho inviato subito il file intero, pensavo che un singolo foglio sarebbe andato bene

  • OFFLINE
    patel45
    Post: 3.804
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 03/04/2017 07:55
    nel foglio vero ci sono formule, nel primo allegato non c'erano, abbiamo perso tempo, non si possono ordinare fogli con formule o per lo meno io non lo so fare. Spero che avrai capito che il file di esempio DEVE riflettere quello originale.

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 101
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 03/04/2017 08:18
    Però io pensato alla macro CopiaIncolla (valori) proprio per questo, cosi da eliminare le formule.
    È strano perchè la macro funziona (unisce le righe) però nel finale manda in "caricamento" excel.
    Per questo pensavo fosse uguale il foglio (dopo la macro CopiaIncolla) che ti avevo inviato.
    Scusa se ti ho fatto perdere tempo
  • OFFLINE
    patel45
    Post: 3.805
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 03/04/2017 12:25
    A che serve la macro rimuovi duplicati ? non dobbiamo sommarli i duplicati ?
    Inoltre la macro worksheet_change deve essere eliminata, perché ce l'hai messa ?
    [Modificato da patel45 03/04/2017 13:20]

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 102
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 03/04/2017 14:07
    Ciao, la macro Rimuovi Duplicati l'ho inserita per indicare la quantitá sparata. Il lettore è in grado solo di leggere il codice ma non la quantitá, quindi per esprimere 2 viti come quantità, devo sparare due volte il codice "360".
    Poi, appunto la macro elimina I 360 duplicati cosi rimane solo un 360 e come quantità due.
    WoorksheetChange serve per attivare la macro RimuoviDuplicati.
    Quando legge la parola FINE,allora parte la macro di cui sopra.
    la macro RimuiviDuplicati poi va integrata la tua che elimina non più I Codici duplicati, ma il Nome e diametro duplicati.
    Grazie per la pazienza.
    (al foglio "1" lancia la sequenza delle macro da me indicate con I dati che ho inserito io e ti accorgerai del risultato voluto)
  • OFFLINE
    gionox
    Post: 103
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 03/04/2017 14:11
    Ah, ora che ci penso la tua macro andrebbe a compensare anche la funzione di RimuoviDuplicati.
    Giusto!
    RimuoviDuplicati l'avevo pensata prima di accorgermi del problema dei cavi.
  • OFFLINE
    patel45
    Post: 3.807
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 03/04/2017 17:20
    elimina la macro worksheet_change e prova questa e solo questa
    Sub CopiaIncolla()
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    numvuote = WorksheetFunction.CountBlank(Range("B8:B" & LR))
    numpiene = LR - numvuote
    Range("A8:G" & numpiene).Copy
    Range("A8:G" & numpiene).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A" & numpiene + 1 & ":G" & LR).ClearContents
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    Set Rng = Range("A7:G" & LR)
    With ActiveWorkbook.Worksheets(1).Sort
          .SortFields.Clear
          .SortFields.Add Key:=Range( _
            "B8"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          .SetRange Rng
          .Header = xlYes
          .MatchCase = False
          .Orientation = xlTopToBottom
          .SortMethod = xlPinYin
          .Apply
    End With
    J = 8
    Direction = Cells(J, 1).Value
    Do While Direction <> ""
       Do While Cells(J + 1, "B").Value = Cells(J, "B").Value
          Cells(J, "E").Value = Cells(J + 1, "E").Value + Cells(J, "E").Value
          Cells(J, "G").Value = Cells(J + 1, "G").Value + Cells(J, "G").Value
          Rows(J + 1).Delete
        Loop
        J = J + 1
        Direction = Cells(J, 1).Value
    Loop
    End Sub


    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 105
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 03/04/2017 19:53
    Ciao Patel, per elimina la macro WorkChange intendi eliminare l'avvio della macro RimuoviDuplicati e lasciare lo stesso codice nel foglio di lavoro che però mi lanci solo la tua macro dopo la parola FINE, giusto?
    Se cosi fosse, non vorrei sbagliarmi ma c'è un problema, se i codici letti sono rispettivamente: 150 - 150 - 149. La reale quantità è 15, però la macro mi restituisce 35, perchè ho notato che ogni volta che scrivo 150 tutte le righe con codice 150 cambiano valore (incrementandosi) e quindi nella somma esce 35 al posto di 15.
    [Modificato da gionox 03/04/2017 20:02]
  • OFFLINE
    patel45
    Post: 3.809
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 03/04/2017 20:12
    io intendo ELIMINARE non modificare, la macro worksheet_change NON ci deve essere, è dannosa
    [Modificato da patel45 03/04/2017 20:15]

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 106
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 03/04/2017 20:19
    Scusami se ti contraddico, però ho appena provato a eliminare qualsiasi riga di codice presente nel foglio come tu mi hai detto.
    Ho scritto nuovamente 150 - 150 -149 e ho lanciato la tua macro da Scheda Sviluppo, Gestione Macro etc.
    Il risultato è sempre 35
  • OFFLINE
    patel45
    Post: 3.810
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 03/04/2017 20:52
    mi dispiace, ma non ti capisco, non ho idea di cosa significa

    Ho scritto nuovamente 150 - 150 -149 e ...


    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    gionox
    Post: 107
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 03/04/2017 21:03
    Provi a scrivere nella Colonna J: 150 out,150 out, e 149 in.
    La somma finale non è 15 :(
    (150 corrisponde alla lunghezza 10 metri,e 149 alla lunghezza 5 metri. Quindi 150 digitato due volte: 20 metri. 149 digitato una volta 5 metri ---> 20-5=15)
    [Modificato da gionox 03/04/2017 21:04]
  • OFFLINE
    patel45
    Post: 3.812
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 04/04/2017 09:17
    io non ho mai preso in considerazione la colonna J e le tue formule, cosa c'entra con questa discussione ?
    In conclusione, non so perché hai inserito la macro worksheet_change, se ti serve per qualche motivo non puoi usare la mia perché interviene ad ogni cambiamento e manda tutto in loop
    [Modificato da patel45 04/04/2017 09:23]

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • 15MediaObject5,00143 1
1