La macro puo' essere velocizzata usando la WorksheetFunction.Countif (che esisteva gia' in excel 97), con completamento in 2-3 secondi, rispetto alla quaresima che richiede quella attuale.
Allo scopo sostituire questa parte
- Codice: Seleziona tutto
For Each cc1 In rng1
manca = True
For Each cc2 In rng2
If cc1.Value = cc2.Value Then
manca = False
cc1.Offset(, 8).Resize(, 3).Value = cc1.Resize(, 3).Value
Exit For
End If
Next
If manca Then cc1.Offset(, 14).Resize(, 3).Value _
= cc1.Resize(, 3).Value
Next
con questa:
- Codice: Seleziona tutto
For Each cc1 In rng1
If Application.WorksheetFunction.CountIf(rng2, cc1.Value) > 0 Then
cc1.Offset(, 8).Resize(, 3).Value = cc1.Resize(, 3).Value
Else
cc1.Offset(, 14).Resize(, 3).Value = cc1.Resize(, 3).Value
End If
Next
Noterai il rozzo allineamento verticale delle istruzioni, rispetto alla sinuosa indentazione della versione precedente; ma e' leggermente piu' veloce.
A parte la velocita', la macro precedente non considera uguali stringhe minuscolo e stringhe maiuscole, quindi ad esempio ABITARE SEGESTA e Abitare Segesta sono considerati diversi. Per evitare cio' potresti sostituire
If cc1.Value = cc2.Value Then con
If UCase(cc1.Value) = UCase(cc2.Value) ThenCiao.