Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Macro confronto tra due range

Ultimo Aggiornamento: 28/07/2017 18:04
Post: 1
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
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]
Post: 1.502
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
28/07/2017 16:17

Ciao
sottoponi un esempio altrimenti si sarebbe costretti a ricostruire il tuo file.

saluti


Domenico
Win 10 - Excel 2016
Post: 1
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
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]


Post: 1.505
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 2
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
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.


Post: 1.506
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 3
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
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


Post: 1.507
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 4
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
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



Post: 1.510
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 5
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
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


Post: 6
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
28/07/2017 17:54

E ed F sistemati :) manca solo D


Post: 7
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
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!!!


Post: 1.512
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 8
Registrato il: 21/12/2003
Utente Junior
2013
OFFLINE
28/07/2017 18:04

Grazie mille davvero gentilissimo


Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 21:47. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com