Ich habe den folgenden Code erfolgreich funktioniert, jedoch muss es auf zwei Arrays von jeweils 130k + Zeilen ausgeführt werden. Die aktuelle Laufzeit für den gesamten Datensatz beträgt etwa 24 Minuten. Nach einer Zählung von einem Punkt werden 9,8 Milliarden Male wiederholt. Ich habe Artikel über die Verwendung von Match, Vlookup gelesen und sie scheinen alle darauf hinzuweisen, dass eine iterative Schleife (wie ich sie benutzt habe) die schnellste Methode ist, aber ich konnte nicht verstehen, wie man die anderen Methoden zum Laufen bringt mit dynamischen Arrays und damit entsprechend testen.Gibt es eine schnellere Möglichkeit, Daten zwischen dynamischen Arrays in VBA zu vergleichen?
Kann mir jemand sagen, ob es einen schnelleren Weg gibt, diese Aktivität abzuschließen, und wenn ja, wie?
Sub TESTVLOOKUPARRAY()
Dim PSORG1() As Variant
Dim PSORG1Tot As Variant
Dim PSORG1RT As Variant
Dim PSORG2() As Variant
Dim PSORG2Tot As Variant
Dim PSORG2RT As Variant
Sheets("Sheet1").Select
PSORG2RT = Application.CountA(Range("A:A"))
PSORG2Tot = "A1:B" & PSORG2RT
PSORG2 = Range(PSORG2Tot) ' PSORG2 is now an allocated array
Sheets("Sheet2").Select
PSORG1RT = Application.CountA(Range("A:A"))
PSORG1Tot = "A1:B" & PSORG1RT
PSORG1 = Range(PSORG1Tot) ' PSORG1 is now an allocated array
a = 2 ' to increment ORG values in PSORG1
Do
Finish = "No"
b = 1 ' to increment ORG values in PSORG2
Do
If PSORG1(a, 1) = PSORG2(b, 1) Then
PSORG1(a, 2) = PSORG2(b, 2)
Finish = "True"
ElseIf b = PSORG2RT Then
PSORG1(a, 2) = "NULL"
Finish = "True"
End If
b = b + 1
Loop Until Finish = "True"
a = a + 1
Loop Until a = PSORG1RT + 1
Sheets("Sheet2").Select
Set Destination = Range("A1")
Destination.Resize(UBound(PSORG1, 1), UBound(PSORG1, 2)).Value = PSORG1
End Sub
Ich würde stattdessen eine ArrayList verwenden, da sie eine '.Exists()' Methode für schnellen Vergleich hat. –
Bitte teilen Sie uns mit, wer der Gewinner war (auf Ihren Daten). : P – Jeeped
Da Ihr Code wie erwartet funktioniert, nur langsamer als Sie möchten, wäre dies viel besser in [Code Review] (http://codereview.stackexchange.com/). – FreeMan