モダンコードが書きたいなぁと思いを馳せつつ、客要望のシステムを粛々と書いています。ロックマンです。
今回はEXCELツール(VBAマクロ)の作成時の気付きについて忘備録として記事を挙げさせていただきます。
コードの概要
- 条件2つが両方TRUEの場合処理をする
- 条件1:数値の等しくない判定
- 条件2:文字列の比較判定をする
- 計測に必要な最低限の時間のため、1億回ループする
- 処理の前後で時間を取得、差分を取り処理時間を出力する
試験コード
以下2種類のコードを用意しました。
コード1
条件1と条件2をANDでつなぎ、条件は常にTRUEとする。
Sub hoge()
Dim startTime As Double, endTime As Double
Dim v As Long
Dim ex1 As Long: ex1 = 100000001
Dim ex2 As String: ex2 = "テキスト"
startTime = Timer
For i = 1 To 100000000
If (ex1 <> i and ex2 = "テキスト") Then
v = i
End If
Next i
endTime = Timer
MsgBox endTime - startTime & "秒"
コード2
条件1と条件2をネストする、条件は常にTRUEとする。
Sub hoge()
Dim startTime As Double, endTime As Double
Dim v As Long
Dim ex1 As Long: ex1 = 100000001
Dim ex2 As String: ex2 = "テキスト"
startTime = Timer
For i = 1 To 100000000
If (ex1 <> i) Then
If (ex2 = "テキスト") Then
v = i
End If
End If
Next i
endTime = Timer
MsgBox endTime - startTime & "秒"
結果
試行 | コード1 | コード2 |
---|---|---|
1 | 8.05078秒 | 6.03515秒 |
2 | 7.85937秒 | 5.93359秒 |
3 | 7.87109秒 | 6.02343秒 |
ANDにしたほうが早いのかな?と思ったらネスト(コード2)のほうが早いのは以外だったって話でした。
ちなみに
ネストしたほうが条件1の結果がFALSEなら条件2を見に行かないから、条件によっては更に早くなるかもしれない・・・?