Ciao a tutti,
sull'onda di questa discussione, mi domandavo: esistono metodi alternativi più efficienti rispetto all'uso di Intersect?
Io la condizione dell'If la scriverei proprio
L'idea che mi sono fatto è: con questo sistema impongo a caricare in un registro il valore all'indirizzo della proprietà, fare altrettanto con l'altra, confrontarli ed infine usare il risultato della comparazione. Con l'Intersect, dovendo cercare una sovrapposizione dei due Range e rendere un ennesimo Range, confrontare e poi negare il risultato è necessariamente più impegnativo.
Un piccolo test che ho pensato è
Voi avete metodi alternativi? A me i risultati, al netto di errori nel codice, sembrano confermare il mio ragionamento. La Intersect è dispendiosa il doppio rispetto all'Address e 9-10 volte rispetto alla Column.
Vi torna?
sull'onda di questa discussione, mi domandavo: esistono metodi alternativi più efficienti rispetto all'uso di Intersect?
Io la condizione dell'If la scriverei proprio
Target.Address = cell.Address, così da evitare l'Intersect e il confronto negato contro Nothing. Verifico l'uguaglianza tra due stringhe e via andare.L'idea che mi sono fatto è: con questo sistema impongo a caricare in un registro il valore all'indirizzo della proprietà, fare altrettanto con l'altra, confrontarli ed infine usare il risultato della comparazione. Con l'Intersect, dovendo cercare una sovrapposizione dei due Range e rendere un ennesimo Range, confrontare e poi negare il risultato è necessariamente più impegnativo.
Un piccolo test che ho pensato è
Visual Basic:
Sub t()
Dim r1 As Range, r2 As Range
Dim j As Long
Dim res As Boolean
Dim t As Single
j = 100000
Set r1 = Range("A1")
Set r2 = Range("A2")
Debug.Print "Cella SINGOLA"
t = Timer
For i = 0 To j
res = Not Intersect(r1, r2) Is Nothing
Next i
Debug.Print Timer - t
t = Timer
For i = 0 To j
res = r1.Address = r2.Address
Next i
Debug.Print Timer - t
Set r2 = Range("A:A")
Debug.Print "Cella in COLONNA"
t = Timer
For i = 0 To j
res = Not Intersect(r1, r2) Is Nothing
Next i
Debug.Print Timer - t
t = Timer
For i = 0 To j
res = r1.Column = 1
Next i
Debug.Print Timer - t
End Sub
Voi avete metodi alternativi? A me i risultati, al netto di errori nel codice, sembrano confermare il mio ragionamento. La Intersect è dispendiosa il doppio rispetto all'Address e 9-10 volte rispetto alla Column.
Vi torna?
