voglio che lo script confronti il valori in colonna AG di Foglio1 con quelli in colonna A di Foglio4 e che mi restituisca in colonna AH di Foglio1 i valori in colonna J di Foglio4 qualora vi sia una corrispondenza.
In parole povere si tratta di un comunissimo CERCA.VERTICALE
Il codice che uso è questo:
- Codice: Seleziona tutto
Ws1.Select
For RR1 = 3 To UR1
RR4 = Application.WorksheetFunction.Match(Ws1.Range("AG" & RR1), Ws4.Columns("A:A"), 0)
Ws1.Range("AH" & RR1) = Ws4.Range("A" & RR4).Value
Next RR1
Ovviamente lo script si blocca quando non trova nessuna corrispondenza: Errore di Run-Time '1004': Impossibile trovare la proprietà Match per la classe WorksheetFunction.
Allora cosa ho fatto? Ho inserito il classico controllo On Error Resume Next ... On Error GoTo 0
- Codice: Seleziona tutto
Ws1.Select
For RR1 = 3 To UR1
On Error Resume Next
RR4 = Application.WorksheetFunction.Match(Ws1.Range("AG" & RR1), Ws4.Columns("A:A"), 0)
Ws1.Range("AH" & RR1) = Ws4.Range("A" & RR4).Value
Next RR1
On Error GoTo 0
Il problema è che così, quando non c'e' corrispondenza, lo script non lascia la cella (AH & RR1) vuota, ma ci mette dentro il valore che gli era rimasto "in memoria", cioè quello della cella sopra.
Ho provato a risolvere così, ma non funziona.
- Codice: Seleziona tutto
Ws1.Select
For RR1 = 3 To UR1
RR4 = Application.WorksheetFunction.Match(Ws1.Range("AG" & RR1), Ws4.Columns("A:A"), 0)
If IsError(RR4) Then GoTo SaltaRR1
Ws1.Range("AH" & RR1) = Ws4.Range("J" & RR4).Value
SaltaRR1:
Next RR1
Qualcuno ha idea di come fare?
Grazie mille!!!