[Excel] IF関数とCHOOSE関数の処理速度

IF関数とCHOOSE関数、どちらの処理速度が速いのか検証してみました。

検証環境

計測するマクロはこちら。
E1に1と2を交互に1000回入れてその間の時間を計測します。

Sub run()
    Dim time As Double
    Dim idx As Long
    Dim E1 As Range: Set E1 = Me.Range("E1")
    time = Timer
    
    For idx = 1 To 1000
        If idx Mod 2 = 0 Then
            E1.Value = 2
        Else
            E1.Value = 1
        End If
    Next
    
    Debug.Print Timer - time
End Sub

シートはこちらになります。
E1が1の時はA列、2の時はB列をC列に表示する関数をIFとCHOOSEで作成します。
※E1に1,2以外が入る場合は考慮しません。

関数のパターン

4パターンの関数を比較します。

  1. IF =IF($E$1=1,A1,B1)
  2. IF 配列関数 {=IF(E1=1,A1:A1000:B1:B1000)}
  3. CHOOSE =CHOOSE($E$1,A1,B1)
  4. CHOOSE 配列関数 {=CHOOSE(E1,A1:A1000,B1:B1000)}

この4パターンの関数をシート表示、非表示の計8パターンを各10回計測し平均を出します。

結果

・シート表示時

IF IF
配列関数
CHOOSE CHOOSE
配列関数
11.63281251.621093751.61718751.62890625
21.625 1.625 1.621093751.61328125
31.6328125 1.625 1.61718751.625
41.62890625 1.6171875 1.621093751.640625
51.640625 1.62109375 1.621093751.62890625
61.625 1.62890625 1.621093751.6328125
71.625 1.6171875 1.636718751.6171875
81.625 1.62109375 1.613281251.61328125
91.62890625 1.625 1.6251.640625
101.63671875 1.62109375 1.61718751.63671875
平均1.630078125 1.622265625 1.621093751.627734375

・シート非表示時

IFIF
配列関数
CHOOSECHOOSE
配列関数
10.363281250.324218750.363281250.3359375
20.363281250.324218750.363281250.33203125
30.3593750.33593750.3593750.33203125
40.3593750.339843750.363281250.3359375
50.3593750.339843750.3593750.32421875
60.363281250.343750.363281250.33984375
70.3593750.324218750.3593750.328125
80.3593750.33593750.363281250.328125
90.3593750.343750.363281250.328125
100.355468750.3281250.3593750.33203125
平均0.360156250.3324218750.361718750.331640625

まとめ

誤差

コメント