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