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パターンの関数を比較します。
- IF =IF($E$1=1,A1,B1)
- IF 配列関数 {=IF(E1=1,A1:A1000:B1:B1000)}
- CHOOSE =CHOOSE($E$1,A1,B1)
- CHOOSE 配列関数 {=CHOOSE(E1,A1:A1000,B1:B1000)}
この4パターンの関数をシート表示、非表示の計8パターンを各10回計測し平均を出します。
結果
・シート表示時
IF | IF 配列関数 | CHOOSE | CHOOSE 配列関数 | |
---|---|---|---|---|
1 | 1.6328125 | 1.62109375 | 1.6171875 | 1.62890625 |
2 | 1.625 | 1.625 | 1.62109375 | 1.61328125 |
3 | 1.6328125 | 1.625 | 1.6171875 | 1.625 |
4 | 1.62890625 | 1.6171875 | 1.62109375 | 1.640625 |
5 | 1.640625 | 1.62109375 | 1.62109375 | 1.62890625 |
6 | 1.625 | 1.62890625 | 1.62109375 | 1.6328125 |
7 | 1.625 | 1.6171875 | 1.63671875 | 1.6171875 |
8 | 1.625 | 1.62109375 | 1.61328125 | 1.61328125 |
9 | 1.62890625 | 1.625 | 1.625 | 1.640625 |
10 | 1.63671875 | 1.62109375 | 1.6171875 | 1.63671875 |
平均 | 1.630078125 | 1.622265625 | 1.62109375 | 1.627734375 |
・シート非表示時
IF | IF 配列関数 | CHOOSE | CHOOSE 配列関数 | |
---|---|---|---|---|
1 | 0.36328125 | 0.32421875 | 0.36328125 | 0.3359375 |
2 | 0.36328125 | 0.32421875 | 0.36328125 | 0.33203125 |
3 | 0.359375 | 0.3359375 | 0.359375 | 0.33203125 |
4 | 0.359375 | 0.33984375 | 0.36328125 | 0.3359375 |
5 | 0.359375 | 0.33984375 | 0.359375 | 0.32421875 |
6 | 0.36328125 | 0.34375 | 0.36328125 | 0.33984375 |
7 | 0.359375 | 0.32421875 | 0.359375 | 0.328125 |
8 | 0.359375 | 0.3359375 | 0.36328125 | 0.328125 |
9 | 0.359375 | 0.34375 | 0.36328125 | 0.328125 |
10 | 0.35546875 | 0.328125 | 0.359375 | 0.33203125 |
平均 | 0.36015625 | 0.332421875 | 0.36171875 | 0.331640625 |
まとめ
誤差
コメント