Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
ciao gildum,
non che già non sia abbastanza veloce la procedura che hai creato ma, volendo, prova questa che riporta i valori, senza fermarsi nel caso non venga trova una occorrenza (come fa la tua), sfruttando una dictionary:
'---
Sub Associa()
Dim iTimerAssocia As Double: iTimerAssocia = Timer
Dim rIsin1 As Range, rIsin2 As Range
Dim arrIsin1 As Variant
Dim arrIsin2A As Variant, arrIsin2B As Variant
Dim arrIsin1Val() As Variant
Dim dictIsin2 As Object
Dim i As Variant
Dim cont As Long
Set rIsin1 = Range("Isin1")
Set rIsin2 = Range("Isin2")
Set dictIsin2 = CreateObject("Scripting.Dictionary")
With rIsin1
ReDim arrIsin1Val(1 To .Rows.Count, 1 To 1)
arrIsin1 = .Value
End With
With rIsin2
arrIsin2A = .Columns(1).Value
arrIsin2B = .Columns(2).Value
End With
For Each i In arrIsin2A
cont = cont + 1
dictIsin2(i) = arrIsin2B(cont, 1)
Next i
cont = 0
For Each i In arrIsin1
cont = cont + 1
If i <> vbNullString Then
If dictIsin2.Exists(i) Then
arrIsin1Val(cont, 1) = dictIsin2(i)
End If
End If
Next i
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
rIsin1.Offset(0, 1).Value = arrIsin1Val
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
Debug.Print "iTimerAssocia = " & Timer - iTimerAssocia
End Sub
'---
Su 5.000 righe ho misurato questi tempi (dopo aver inserito anche nella tua procedura i comandi che bloccano il ricoalcolo e "congelano" lo schermo:
iTimerAssocia = 0,0625
iTimerVertLookup = 0,85546875
iTimerAssocia = 0,046875
iTimerVertLookup = 0,875
iTimerAssocia = 0,046875
iTimerVertLookup = 0,875
iTimerAssocia = 0,046875
iTimerVertLookup = 0,91015625
iTimerAssocia = 0,0390625
iTimerVertLookup = 0,875
iTimerAssocia = 0,046875
iTimerVertLookup = 0,87109375
iTimerAssocia = 0,046875
iTimerVertLookup = 0,859375
iTimerAssocia = 0,046875
iTimerVertLookup = 0,859375
iTimerAssocia = 0,046875
iTimerVertLookup = 0,90625
iTimerAssocia = 0,0390625
iTimerVertLookup = 0,87109375
P.s. parto dal presupposto che i codici presenti in Isin2 siano univoci (considerato che in quell'intervallo fai una ricerca con CERCA.VERT che ovviamente troverebbe solo una corrispondenza).
EDIT: qui trovi il link ad un file di esempio File esempio