|
おはようございます。
>両方のIFが真になる事はないので、
>
>If AAA(i) > maxD Then
> maxD = AAA(i)
>ElseIf AAA(i) < minD Then
> minD = AAA(i)
>End If
>
>と書いた方が速くなるような気もしますが、実はこの条件下ではそうはなりません。
>(最近は違うかも知れませんが...)
>なぜだかわかるかな^^;
'==============================================================
Sub test()
Dim AAA(1 To 1000000)
Dim i As Long
Dim maxD As Long
Dim minD As Long
Dim tm As Double
For i = 1 To UBound(AAA)
AAA(i) = CLng(Rnd() * 3000000) + 1
Next
'MsgBox "ready"
'**********************************************************
'ブロック形式のIF文
tm = [now()]
maxD = AAA(1): minD = AAA(1)
For i = 2 To UBound(AAA)
If AAA(i) > maxD Then
maxD = AAA(i)
End If
If AAA(i) < minD Then
minD = AAA(i)
End If
Next
Debug.Print maxD
Debug.Print minD
Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
'**********************************************************
'IF ELSEIFのブロック
tm = [now()]
maxD = AAA(1): minD = AAA(1)
For i = 2 To UBound(AAA)
If AAA(i) > maxD Then
maxD = AAA(i)
ElseIf AAA(i) < minD Then
minD = AAA(i)
End If
Next
Debug.Print maxD
Debug.Print minD
Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
'**********************************************************
'IF Else ステートメント
tm = [now()]
maxD = AAA(1): minD = AAA(1)
For i = 2 To UBound(AAA)
If AAA(i) > maxD Then maxD = AAA(i)
If AAA(i) < minD Then minD = AAA(i)
Next
Debug.Print maxD
Debug.Print minD
Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub
上記のコードの結果は、私が20回ほど実行しましたが、全て
ブロック形式のIF文 > IF ELSEIFのブロック > IF Else ステートメント
という処理時間でした。
(Dim AAA(1 to 3000000) にすると、顕著な差になるかも・・・)
詳細の解説を待ちます。
|
|