Excel Forum Per condividere esperienze su Microsoft Excel

Macro confronto tra due range

  • Messaggi
  • OFFLINE
    luck83
    Post: 1
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 15:29
    Buongiorno,
    avrei gentilmente bisogno di una mano per riuscire a realizzare una macro che mi permetta di aggiornare uno sheet input con n campi di un`altro sheet chiamato change report,a condizione che i dati contenuti in change report non siano presenti gia nello sheet input. I due elenchi di dati ovviamente hanno lunghezza diversa, in quanto nel primo sheet posso avere n dati, nel secondo n,n+1, n-1.
    Ho provato diverse strategie ma sempre il risultato non era ottimale/ho abbandonato il codice perche non funzionava.
    Se servissero maggiori dettagli scrivetemi

    Intanto vi mando l`ultimo codice che ho provato...sicuro qualcosa manca :)

    Sub update_chg_report()
    Dim max, i, line, l As Long

    max = Sheet3.Cells(1, 10).Value

    line = Sheet3.Cells(2, 2).Value

    For i = 2 To max
    If line = Sheet8.Cells(i, 1).Value Then
    line = line + 1
    Else
    If line <> Sheet8.Cells(i, 1).Value Then
    l = max + 2
    Sheet3.Cells(l, 1).Value = Sheet8.Cells(i, 2)
    Sheet3.Cells(l, 2).Value = Sheet8.Cells(i, 1)
    Sheet3.Cells(l, 3).Value = Sheet8.Cells(i, 3)
    Sheet3.Cells(l, 5).Value = Sheet8.Cells(i, 5)
    Sheet3.Cells(l, 6).Value = Sheet8.Cells(i, 6)
    Sheet3.Cells(l, 9).Value = Sheet8.Cells(i, 4)
    End If
    Next
    End Sub

    Grazie!

    Ciao
    [Modificato da luck83 28/07/2017 15:38]
  • OFFLINE
    dodo47
    Post: 1.502
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 28/07/2017 16:17
    Ciao
    sottoponi un esempio altrimenti si sarebbe costretti a ricostruire il tuo file.

    saluti


    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    luck83
    Post: 1
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 16:25
    Ho allegato il file di esempio con i dati input e change record. Come dicevo, la macro deve confrontare i dati input con change record e se i dati non sono presenti, li deve appunto inserire nello sheet input. Ovviamente il numero di dati cambia, dunque servirebbe inserire riferimenti "variabili" a range e quant`altro.
    [Modificato da luck83 28/07/2017 16:26]


  • OFFLINE
    dodo47
    Post: 1.505
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 28/07/2017 17:01
    Ciao
    da quanto ho capito:
    si legge "change" e se un codice non è presente in "input" si inserisce in "input", è così?

    Presumo che il codice univoco sia quello in col. A di "change"

    Una volta appurato che non c'è in "input" cosa ci copi: col. A, B e C ?

    saluti


    [Modificato da dodo47 28/07/2017 17:02]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    luck83
    Post: 2
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 17:05
    Ciao,

    si esattamente. Legge tutti i valori in change li testa con quelli in Input e aggiunge solo i valori non presenti in Input.
    I codici univoci sono per lo sheet input la colonna B, per l`altro sheet la colonna A.


  • OFFLINE
    dodo47
    Post: 1.506
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 28/07/2017 17:06
    non vedo attinenze tra la col. B di "input" e la col. A di "change".
    oppure non ho capito che vuoi


    [Modificato da dodo47 28/07/2017 17:07]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    luck83
    Post: 3
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 17:08
    Ciao,

    hmm scusami hai pienamente ragione...i valori univoci sono tutti sulla colonna A.

    E che sto lavorando su un altro file con riferimenti diversi, dunque ho sbagliato :D


  • OFFLINE
    dodo47
    Post: 1.507
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 28/07/2017 17:25
    Ciao
    questa è basata sull'esempio che hai allegato e copia solo le col A,B,C in quanto il resto non saprei dove inserirlo.

    saluti

    Sub AggiungiCodici()
    Dim shFrom As Worksheet, shTo As Worksheet, urF As Long, urT As Long, r As Long
    Dim c As Object, mCod As String
    Set shFrom = Worksheets("Change report")
    Set shTo = Worksheets("Input")
    urF = shFrom.Range("A" & Rows.Count).End(xlUp).Row
    urT = shTo.Range("A" & Rows.Count).End(xlUp).Row + 1
    For r = 2 To urF
        mCod = shFrom.Cells(r, 1)
        With shTo.Range("A:A")
            Set c = .Find(mCod, LookIn:=xlValues, lookat:=xlWhole)
            If c Is Nothing Then
                shFrom.Range("A" & r & ":C" & r).Copy shTo.Cells(urT, 1)
                urT = urT + 1
            End If
        End With
    Next r
    Set shFrom = Nothing
    Set shTo = Nothing
    Set c = Nothing
    End Sub




    [Modificato da dodo47 28/07/2017 17:26]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    luck83
    Post: 4
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 17:31
    Grazie mille funziona alla grande :D

    La colonna D, E ed F di Change report andrebbero messe rispettivamente in I,F e G di Input.
    Riusciresti ad aggiungermi questa parte?

    Grazie mille veramente per l`aiuto



  • OFFLINE
    dodo47
    Post: 1.510
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 28/07/2017 17:43
    ciao
    in col. D di change hai una formula, devi decidere cosa vuoi in input: la formula o il valore?

    E poi fai qualche tentativo pure tu...;)

    saluti


    [Modificato da dodo47 28/07/2017 17:43]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    luck83
    Post: 5
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 17:45
    Valore...si hai ragione pero sto cercando di trovare una soluzione ma non sono cosi bravo come te :( per questo ti chiedo


  • OFFLINE
    luck83
    Post: 6
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 17:54
    E ed F sistemati :) manca solo D


  • OFFLINE
    luck83
    Post: 7
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 17:56
    Niente provando e riprovando ho messo a posto anche questa...che dire ti ringrazio infinitamente della mano che mi hai dato!!!


  • OFFLINE
    dodo47
    Post: 1.512
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 28/07/2017 17:57
    ciao
    facciamo così in modo che volendo puoi rettificare.
    Sostituisci:

    ....
            If c Is Nothing Then
                shTo.Cells(urT, 1) = shFrom.Cells(r, 1)
                shTo.Cells(urT, 2) = shFrom.Cells(r, 2)
                shTo.Cells(urT, 3) = shFrom.Cells(r, 3)
                shTo.Cells(urT, 6) = shFrom.Cells(r, 5)
                shTo.Cells(urT, 7) = shFrom.Cells(r, 6)
                shTo.Cells(urT, 9) = shFrom.Cells(r, 4)
                urT = urT + 1
            End If
    ....


    Saluti


    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    luck83
    Post: 8
    Registrato il: 21/12/2003
    Utente Junior
    2013
    00 28/07/2017 18:04
    Grazie mille davvero gentilissimo