AW: bei mir (Excel 2002) ist Select Case schneller
23.04.2009 00:36:54
Daniel
und das bei einem Testszenario mit 60.000 Zeilen und einer Prüfung auf die Zufallsziffern 0-9
das ergebnis ist, wenn immer der 1. Case zieht, dann sind IF-THEN und SELECT CASE gleich schnell.
sind die Cases allerdings gleichwahrscheinlich (jeder Case kommt in etwa gleich häufig vor), dann ist Select Case c.a. doppelt so schnell.
hier mal das Testszenario.
als erstes muss "TestAufbauen" laufen, um die Zufallszahlen zu generieren.
zum Testen dann "Test" starten. Das Ergebnis wird im Direktfenster ausgegeben
über die Konstante y kann eingestellt werden, was getestet werden soll:
1 - alle Cases (zufallszahlen 0-9)
2 - immer der erste Fall (immer Wert 0)
3 - immer ein mittlerr Wert (immer 4)
4 - immer der letzte Fall (ELSE, immer 10)
Sub test()
Const x = 60000
Const y = 1
Debug.Print "If-Then: " & Format(IFTHEN(x, y), "0.000")
Debug.Print "Select : " & Format(SelectCase(x, y), "0.000")
End Sub
Sub TestAufbauen()
Columns(1).FormulaLocal = "=Ganzzahl(Zufallszahl()*10)"
Columns(1).Formula = Columns(1).Value
Columns(2).Value = 0
Columns(3).Value = 4
Columns(4).Value = 11
End Sub
Function IFTHEN(anz As Long, sp As Integer) As Double
Dim arr
Dim i As Long
Dim T As Double
arr = Range("A1:e" & anz)
T = Timer
For i = 1 To UBound(arr, 1)
If arr(i, sp) = 0 Then
arr(i, 5) = 9
ElseIf arr(i, sp) = 1 Then
arr(i, 5) = 8
ElseIf arr(i, sp) = 2 Then
arr(i, 5) = 7
ElseIf arr(i, sp) = 3 Then
arr(i, 5) = 6
ElseIf arr(i, sp) = 4 Then
arr(i, 5) = 5
ElseIf arr(i, sp) = 5 Then
arr(i, 5) = 4
ElseIf arr(i, sp) = 6 Then
arr(i, 5) = 3
ElseIf arr(i, sp) = 7 Then
arr(i, 5) = 2
ElseIf arr(i, sp) = 8 Then
arr(i, 5) = 1
ElseIf arr(i, sp) = 9 Then
arr(i, 5) = 0
Else
arr(i, 5) = 99
End If
Next
IFTHEN = Timer - T
End Function
Function SelectCase(anz As Long, sp As Integer) As Double
Dim arr
Dim i As Long
Dim T As Double
arr = Range("A1:E" & anz)
T = Timer
For i = 1 To UBound(arr, 1)
Select Case arr(i, sp)
Case 0
arr(i, 5) = 9
Case 1
arr(i, 5) = 8
Case 2
arr(i, 5) = 7
Case 3
arr(i, 5) = 6
Case 4
arr(i, 5) = 5
Case 5
arr(i, 5) = 4
Case 6
arr(i, 5) = 3
Case 7
arr(i, 5) = 2
Case 8
arr(i, 5) = 1
Case 9
arr(i, 5) = 0
Case Else
arr(i, 5) = 99
End Select
Next
SelectCase = Timer - T
End Function
Gruß, Daniel