Macro confronto tra due range

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
luck83
00venerdì 28 luglio 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
dodo47
00venerdì 28 luglio 2017 16:17
Ciao
sottoponi un esempio altrimenti si sarebbe costretti a ricostruire il tuo file.

saluti


luck83
00venerdì 28 luglio 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.
dodo47
00venerdì 28 luglio 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


luck83
00venerdì 28 luglio 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.
dodo47
00venerdì 28 luglio 2017 17:06
non vedo attinenze tra la col. B di "input" e la col. A di "change".
oppure non ho capito che vuoi


luck83
00venerdì 28 luglio 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
dodo47
00venerdì 28 luglio 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




luck83
00venerdì 28 luglio 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

dodo47
00venerdì 28 luglio 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


luck83
00venerdì 28 luglio 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
luck83
00venerdì 28 luglio 2017 17:54
E ed F sistemati :) manca solo D
luck83
00venerdì 28 luglio 2017 17:56
Niente provando e riprovando ho messo a posto anche questa...che dire ti ringrazio infinitamente della mano che mi hai dato!!!
dodo47
00venerdì 28 luglio 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


luck83
00venerdì 28 luglio 2017 18:04
Grazie mille davvero gentilissimo
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 03:06.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com