04.08.2025, 07:20
Hallo knobbi,
Mal noch zur Ergänzung zwei andere Testszenarien (Oben das entsprechend meinem gestrigen Beitrag nur zur "Einstimmung").
bringt bei mehrmaligem Ausführen dieses Subs
String-Vergleich (String): 0,583984375 Übereinstimmungen: 507212
String-Vergleich (String): 0,595703125 Übereinstimmungen: 507212
String-Vergleich (String): 0,599609375 Übereinstimmungen: 507212
String-Vergleich (String): 0,58984375 Übereinstimmungen: 507212
bringt bei mehrmaligem Durchlauf von (String) mit vorherigem (Variant/String) bei Aufruf aus einem übergeordneten Sub
String-Vergleich (Variant/String): 0,78515625 Übereinstimmungen: 507212
String-Vergleich (String): 0,4296875 Übereinstimmungen: 507212
String-Vergleich (String): 0,4101563 Übereinstimmungen: 507212
String-Vergleich (String): 0,4003906 Übereinstimmungen: 507212
Wobei ich das nun erwartet habe, da ja das übergeordnete Sub und entsprechend das Eine oder Andere noch im Speicher gehalten wird.
Ich habe nun mal komplett das Makro von Uwe in 6 Makros vereinzelt und bekomme das:
(oberer Teil zusammen, unterer Teil einzeln)
Monat dann Jahr-Vergleich: 0,27734375 Übereinstimmungen: 507212
Jahr dann Monat-Vergleich: 0,36328125 Übereinstimmungen: 507212
Monat und Jahr-Vergleich: 0,37890625 Übereinstimmungen: 507212
Format-Vergleich: 0,794921875 Übereinstimmungen: 507212
String-Vergleich (Variant/String): 0,796875 Übereinstimmungen: 507212
String-Vergleich (String): 0,376953125 Übereinstimmungen: 507212
********
Monat dann Jahr-Vergleich: 0,251953125 Übereinstimmungen: 507212
Jahr dann Monat-Vergleich: 0,328125 Übereinstimmungen: 507212
Monat und Jahr-Vergleich: 0,349609375 Übereinstimmungen: 507212
Format-Vergleich: 0,75 Übereinstimmungen: 507212
String-Vergleich (Variant/String): 0,6953125 Übereinstimmungen: 507212
String-Vergleich (String): 0,599609375 Übereinstimmungen: 507212
Der Datumsvergleich ist auf jeden Fall schneller. Der Vergleich (String), der sich im oberen Teil sogar minimal vor den Monat-Jahr-Vergleich schiebt, ist dann doch weiter weg, aber immer noch der schnellste von den zweiten 3 Varianten.
Zitat:Das kann mit der internen Speicherverwaltung von VBA zusammen hängen...Da bin ich voll bei Dir

Code:
Sub TestIt()
Dim Start As Double, Ziel As Double, i As Long, k As Long
Dim arr As Variant
arr = Cells(1).CurrentRegion.Value
' String-Array
Dim astr() As String
k = 0: Start = Timer
ReDim astr(1 To UBound(arr), 1 To 2)
For i = 1 To UBound(arr)
astr(i, 1) = arr(i, 1): astr(i, 2) = arr(i, 2)
Next
For i = 1 To UBound(arr)
If Mid$(astr(i, 1), 4) = Mid$(astr(i, 2), 4) Then k = k + 1
Next
Ziel = Timer
Debug.Print "String-Vergleich (String): " & Ziel - Start & vbTab & "Übereinstimmungen: " & k
End Sub
bringt bei mehrmaligem Ausführen dieses Subs
String-Vergleich (String): 0,583984375 Übereinstimmungen: 507212
String-Vergleich (String): 0,595703125 Übereinstimmungen: 507212
String-Vergleich (String): 0,599609375 Übereinstimmungen: 507212
String-Vergleich (String): 0,58984375 Übereinstimmungen: 507212
Code:
Sub TestIt_Call()
Dim arr As Variant
arr = Cells(1).CurrentRegion.Value
StringVariant arr
StringString arr
StringString arr
StringString arr
End Sub
Sub StringVariant(arr As Variant)
Dim Start As Double, Ziel As Double, i As Long, k As Long
' Variant-Array mit Strings
k = 0
Start = Timer
For i = 1 To UBound(arr)
arr(i, 1) = FormatDateTime(arr(i, 1), vbShortDate)
arr(i, 2) = FormatDateTime(arr(i, 2), vbShortDate)
Next
For i = 1 To UBound(arr)
If Mid$(arr(i, 1), 4) = Mid$(arr(i, 2), 4) Then k = k + 1
Next
Ziel = Timer
Debug.Print "String-Vergleich (Variant/String): " & Ziel - Start & vbTab & "Übereinstimmungen: " & k
End Sub
Sub StringString(arr As Variant)
' String-Array
Dim astr() As String
k = 0: Start = Timer
ReDim astr(1 To UBound(arr), 1 To 2)
For i = 1 To UBound(arr)
astr(i, 1) = arr(i, 1): astr(i, 2) = arr(i, 2)
Next
For i = 1 To UBound(arr)
If Mid$(astr(i, 1), 4) = Mid$(astr(i, 2), 4) Then k = k + 1
Next
Ziel = Timer
Debug.Print "String-Vergleich (String): " & Ziel - Start & vbTab & "Übereinstimmungen: " & k
End Sub
bringt bei mehrmaligem Durchlauf von (String) mit vorherigem (Variant/String) bei Aufruf aus einem übergeordneten Sub
String-Vergleich (Variant/String): 0,78515625 Übereinstimmungen: 507212
String-Vergleich (String): 0,4296875 Übereinstimmungen: 507212
String-Vergleich (String): 0,4101563 Übereinstimmungen: 507212
String-Vergleich (String): 0,4003906 Übereinstimmungen: 507212
Wobei ich das nun erwartet habe, da ja das übergeordnete Sub und entsprechend das Eine oder Andere noch im Speicher gehalten wird.
Ich habe nun mal komplett das Makro von Uwe in 6 Makros vereinzelt und bekomme das:
(oberer Teil zusammen, unterer Teil einzeln)
Monat dann Jahr-Vergleich: 0,27734375 Übereinstimmungen: 507212
Jahr dann Monat-Vergleich: 0,36328125 Übereinstimmungen: 507212
Monat und Jahr-Vergleich: 0,37890625 Übereinstimmungen: 507212
Format-Vergleich: 0,794921875 Übereinstimmungen: 507212
String-Vergleich (Variant/String): 0,796875 Übereinstimmungen: 507212
String-Vergleich (String): 0,376953125 Übereinstimmungen: 507212
********
Monat dann Jahr-Vergleich: 0,251953125 Übereinstimmungen: 507212
Jahr dann Monat-Vergleich: 0,328125 Übereinstimmungen: 507212
Monat und Jahr-Vergleich: 0,349609375 Übereinstimmungen: 507212
Format-Vergleich: 0,75 Übereinstimmungen: 507212
String-Vergleich (Variant/String): 0,6953125 Übereinstimmungen: 507212
String-Vergleich (String): 0,599609375 Übereinstimmungen: 507212
Der Datumsvergleich ist auf jeden Fall schneller. Der Vergleich (String), der sich im oberen Teil sogar minimal vor den Monat-Jahr-Vergleich schiebt, ist dann doch weiter weg, aber immer noch der schnellste von den zweiten 3 Varianten.

. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)