| 
    
     |  | おはようございます。 
 >両方の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) にすると、顕著な差になるかも・・・)
 
 
 詳細の解説を待ちます。
 
 |  |