Excel VBA質問箱 IV

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

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


12605 / 76734 ←次へ | 前へ→

【69646】Re:チェックボックスで集計とリストを立ち上げたいのですが。
発言  ichinose@明日から仕事  - 11/8/16(火) 22:20 -

引用なし
パスワード
   こんばんは。

>If CheckBox1.Value = True Then
>の記述方法は十分にありだと思います。
私もこの考え方に近い意見です。
もっともBoolean型に限って
If CheckBox1.Value Then
この記述にしようというローカルルールも良しなんですが・・・。


>(仮にこの書き方をしたとして、どの程度実行速度が低下するかも疑問です。)
私の環境で以下のコードで

Option Explicit
Const lp As Long = 1000000
Sub main1()
  Dim g0 As Long
  For g0 = 1 To 10
    test1
    test2
  Next
End Sub
Sub test1()
  Dim tm As Double
  Dim a As Boolean
  Dim g0 As Long
  Dim cnt As Long
  cnt = 0
  tm = [now()]
  For g0 = 1 To lp
    a = 1
    If a Then
     cnt = cnt + 1
    Else
     cnt = cnt - 1
    End If
  Next
  Debug.Print "test1   " & cnt
  Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub
Sub test2()
  Dim tm As Double
  Dim a As Boolean
  Dim g0 As Long
  Dim cnt As Long
  cnt = 0
  tm = [now()]
  For g0 = 1 To lp
    a = 1 '(Int(Rnd() * 10000) + 1) Mod 2
    If a = True Then
     cnt = cnt + 1
    Else
     cnt = cnt - 1
    End If
  Next
  Debug.Print "test2   " & cnt
  Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub

test1とtest2では、百万回のループで0.02秒〜0.05秒ぐらいtest1の方が
速かったですよ!!

変数aをチェックボックスに置き換えても百万回ループで0.3秒程度の差でした。

インタプリタが
If CheckBox1.Value = True Then

If CheckBox1.Value Then

をどのように解釈しているのか(Pコード自体が本当に1手間よけいな処理に落としている)は、分かりませんが、上記のテスト結果からは、若干ですが差が見られます。

が、コードの分かりやすさという観点から

If CheckBox1.Value = True Then

これを否定することも出来ません。


If 条件文 Then に関しては、実際には、真(True)だったらではなく、
Falseでなかったらという処理をしているので、

以下のコードは、1から百万までの間で4で割り切れない数がいくつあるか数えています。

Option Explicit
Const lp As Long = 1000000
Sub main2()
  Dim g0 As Long
  For g0 = 1 To 10
    test1
    test2
  Next
End Sub
Sub test1()
  Dim tm As Double
  Dim a As Long
  Dim g0 As Long
  Dim cnt As Long
  a = 4
  cnt = 0
  tm = [now()]
  For g0 = 1 To lp
   
    If (g0 Mod a) <> 0 Then
     cnt = cnt + 1
    End If
  Next
  Debug.Print "test1   " & cnt
  Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub
Sub test2()
  Dim tm As Double
  Dim a As Long
  Dim g0 As Long
  Dim cnt As Long
  a = 4
  cnt = 0
  tm = [now()]
  For g0 = 1 To lp
    If g0 Mod a Then
     cnt = cnt + 1
    End If
  Next
  Debug.Print "test2   " & cnt
  Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub


この結果は、0秒から0.03秒ぐらいtest2の方が速いです。


If (g0 Mod a) <> 0 Then

でも、こっちにするだろうなあ・・・。

7 hits

【69633】チェックボックスで集計とリストを立ち上げたいのですが。 LALA 11/8/15(月) 0:33 質問
【69634】Re:チェックボックスで集計とリストを立ち... UO3 11/8/15(月) 7:14 回答
【69635】Re:チェックボックスで集計とリストを立ち... LALA 11/8/15(月) 11:26 質問
【69636】Re:チェックボックスで集計とリストを立ち... UO3 11/8/15(月) 14:02 回答
【69637】Re:チェックボックスで集計とリストを立ち... LALA 11/8/15(月) 14:14 発言
【69638】Re:チェックボックスで集計とリストを立ち... まろにえ 11/8/16(火) 11:49 発言
【69639】Re:チェックボックスで集計とリストを立ち... UO3 11/8/16(火) 12:31 発言
【69640】Re:チェックボックスで集計とリストを立ち... まろにえ 11/8/16(火) 13:27 発言
【69642】Re:チェックボックスで集計とリストを立ち... UO3 11/8/16(火) 14:12 発言
【69644】Re:チェックボックスで集計とリストを立ち... LALA 11/8/16(火) 15:10 発言
【69645】Re:チェックボックスで集計とリストを立ち... こたつねこ 11/8/16(火) 21:18 発言
【69646】Re:チェックボックスで集計とリストを立ち... ichinose@明日から仕事 11/8/16(火) 22:20 発言
【69648】Re:チェックボックスで集計とリストを立ち... こたつねこ 11/8/16(火) 22:52 発言
【69649】Re:チェックボックスで集計とリストを立ち... ichinose 11/8/17(水) 6:17 発言
【69650】Re:チェックボックスで集計とリストを立ち... まろにえ 11/8/17(水) 7:04 発言
【69653】Re:チェックボックスで集計とリストを立ち... UO3 11/8/17(水) 11:05 発言
【69655】Re:チェックボックスで集計とリストを立ち... LALA 11/8/17(水) 18:59 お礼
【69660】Re:チェックボックスで集計とリストを立ち... ichinose 11/8/18(木) 7:22 発言

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