Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


33892 / 76734 ←次へ | 前へ→

【48058】Re:配列の値のmax minについて
発言  ichinose  - 07/4/2(月) 8:09 -

引用なし
パスワード
   おはようございます。

>両方の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) にすると、顕著な差になるかも・・・)


詳細の解説を待ちます。

6 hits

【47959】配列の値のmax minについて GG 07/3/28(水) 10:20 質問
【47961】Re:配列の値のmax minについて ウッシ 07/3/28(水) 10:30 発言
【47963】Re:配列の値のmax minについて GG 07/3/28(水) 10:47 お礼
【47964】Re:配列の値のmax minについて Jaka 07/3/28(水) 10:52 発言
【47967】Re:配列の値のmax minについて GG 07/3/28(水) 11:48 お礼
【47969】Re:配列の値のmax minについて ウッシ 07/3/28(水) 13:50 発言
【47981】Re:配列の値のmax minについて GG 07/3/28(水) 22:54 お礼
【47984】Re:配列の値のmax minについて JuJu 07/3/29(木) 10:09 発言
【48010】Re:配列の値のmax minについて ichinose 07/3/30(金) 10:11 発言
【48011】Re:配列の値のmax minについて ウッシ 07/3/30(金) 10:29 発言
【48012】Re:配列の値のmax minについて Jaka 07/3/30(金) 11:11 発言
【48043】Re:配列の値のmax minについて JuJu 07/4/1(日) 13:37 発言
【48058】Re:配列の値のmax minについて ichinose 07/4/2(月) 8:09 発言
【48063】結果発表 Jaka 07/4/2(月) 13:31 発言

33892 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free