VBで速度比較(その他)

IIf関数とIf

以下の二つで比較。
A = IIf(B = 0, 1, 2)
If B = 0 Then A = 1 Else A = 2
IIfの方が5倍程度時間がかかったが、どちらも1マイクロ秒とかからない。

Choose関数とSelect

以下の二つで比較。
A = Choose(B, 1, 3, 8, 12, 41)
Select Case B
Case 1: A = 1
Case 2: A = 3
Case 3: A = 8
Case 4: A = 12
Case 5: A = 41
End Select
B = 1のときChooseの方が9倍程度時間がかかったが、B = 5のときは6倍程度で、後ろの要素へのアクセスが増えたときには差は縮まる。
ただし、要素数100に対して100個目の要素を指定してしてもなおSelectの方が3倍速く、1個目の要素だと40倍以上の差が出た。

テーブルとSelect

以下の二つで比較。
'テーブルは予め作ってあります
A = Table(B)
Select Case B
Case 1: A = 1
Case 2: A = 3
Case 3: A = 8
Case 4: A = 12
Case 5: A = 41
End Select
配列でテーブルを作ってそれを利用した方が、B = 1のとき2倍、B = 5のときは3倍程度速い。
要素が多ければ多いほど有効だが、値を取得するたびにテーブルを作り直すのは無駄である。

Choose関数とテーブル利用

以下の二つで比較。
A = Choose(B, 1, 3, 8, 12, 41)
'テーブルは予め作ってあります
A = Table(B)
詳細は上二つを参照。
言うまでもないが、今回の結果は上二つの結果を掛け合わせた数値にほぼ等しい。

Switch関数とIf

以下の二つで比較。
A = Switch(B = 1, 1, B = 3, 3, B = 8, 8, B = 999, 999, B = 1200, 1200)
If B = 1 Then
    A = 1
ElseIf B = 3 Then
    A = 3
ElseIf B = 8 Then
    A = 8
ElseIf B = 999 Then
    A = 999
ElseIf B = 1200 Then
    A = 1200
End If
違いは歴然である。
20〜10倍程度Ifの方が速く、要素数が増えるとさらに違いがはっきりする。