Hallo,
hier ein Testcode aller bisherigen Beispiele und meins dazu (aber mal mit 1 Million Zeilen):
Gruß, Uwe
hier ein Testcode aller bisherigen Beispiele und meins dazu (aber mal mit 1 Million Zeilen):
Code:
Sub FillIt()
Cells.Delete
With Range("A1:B1000000")
.NumberFormat = "m/d/yyyy"
.Columns(1).Formula = "=DATE(2000,1,RANDBETWEEN(1,20000))"
.Columns(2).Formula = "=A1+15"
.Copy
.PasteSpecial xlPasteValues
End With
With Application
.Goto Cells(1)
.CutCopyMode = False
End With
End Sub
Sub TestIt()
Dim Start As Double, Ziel As Double, i As Long, k As Long
Dim arr As Variant
arr = Cells(1).CurrentRegion.Value
k = 0
Start = Timer
For i = 1 To UBound(arr)
If Month(arr(i, 1)) = Month(arr(i, 2)) Then
If Year(arr(i, 1)) = Year(arr(i, 2)) Then k = k + 1
End If
Next
Ziel = Timer
Debug.Print "Monat dann Jahr-Vergleich: " & Ziel - Start & vbTab & "Übereinstimmungen: " & k
k = 0
Start = Timer
For i = 1 To UBound(arr)
If Year(arr(i, 1)) = Year(arr(i, 2)) Then
If Month(arr(i, 1)) = Month(arr(i, 2)) Then k = k + 1
End If
Next
Ziel = Timer
Debug.Print "Jahr dann Monat-Vergleich: " & Ziel - Start & vbTab & "Übereinstimmungen: " & k
k = 0
Start = Timer
For i = 1 To UBound(arr)
If Month(arr(i, 1)) = Month(arr(i, 2)) And _
Year(arr(i, 1)) = Year(arr(i, 2)) Then k = k + 1
Next
Ziel = Timer
Debug.Print "Monat und Jahr-Vergleich: " & Ziel - Start & vbTab & "Übereinstimmungen: " & k
k = 0
Start = Timer
For i = 1 To UBound(arr)
If Format(arr(i, 1), "yyyymm") = Format(arr(i, 2), "yyyymm") Then k = k + 1
Next
Ziel = Timer
Debug.Print "Format-Vergleich: " & Ziel - Start & vbTab & "Übereinstimmungen: " & k
' 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
' 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
Gruß, Uwe