Этот вопрос заставил меня задуматься о том, какое решение будет работать быстрее между Select Case
и ElseIf
( Я ранее сравнивал Long с Integer ). Я провел несколько тестов кода Select Case
и сравнил с аналогичным кодом ElseIf
.
Как и ожидалось, особой разницы не было, но операторы Select
всегда выполнялись на немного медленнее, чем ElseIf
. Я сделал несколько итераций около 6 миллиардов проверок, и разница казалась неизменной.
Я сомневаюсь, что эта дельта в несколько секунд на таком громком томе когда-либо стоит отклониться от любого подхода, который вам наиболее удобен. Однако вот мои результаты и код, который я использовал, если кому-то интересно:
'Module variables
Dim beginTIme As Double, i As Long, r As Long
Const MaxValue As Long = 999999999
Sub goSelect()
beginTIme = Now
For i = 0 To MaxValue
r = r Mod 12
Select Case r
Case 0
Case 1
Case 2
Case 3
Case 4
Case 5
Case 6
Case 7
Case 8
Case 9
Case 0
Case 11
End Select
Next i
With Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = Round((Now - beginTIme) * 3600 * 24, 0) & " seconds using select."
.Offset(1, 1).Value = MaxValue
End With
End Sub
Sub go4If()
beginTIme = Now
For i = 0 To MaxValue
r = r Mod 12
If r = 0 Then
ElseIf r = 1 Then
ElseIf r = 2 Then
ElseIf r = 3 Then
ElseIf r = 4 Then
ElseIf r = 5 Then
ElseIf r = 6 Then
ElseIf r = 7 Then
ElseIf r = 8 Then
ElseIf r = 9 Then
ElseIf r = 10 Then
ElseIf r = 11 Then
End If
Next i
With Cells(Rows.Count, 3).End(xlUp)
.Offset(1, 0).Value = Round((Now - beginTIme) * 3600 * 24, 0) & " seconds using elseif."
.Offset(1, 1).Value = MaxValue
End With
End Sub
'Yeah this is what I'm doing on Saturday night....?