[Excel] 配列数式(CSE数式)と通常の数式の処理速度

配列数式というのがあるのは知っているけどちょっと勝手が違うし通常の数式でも同じことが出来るから使ってない人が多いと思います。
自分もそうです…

マクロの高速化の方法を模索している時に配列数式の方が一括で処理できるから処理速度が速いのでは??(適当)
と、思い至ったので調べてみることにしました。

Microsoftの配列数式のガイドラインと例のページによると

コンピューターの処理速度とメモリによっては、大きな配列数式を使用すると、計算速度が低下することがあります。

配列数式のガイドラインと例 -> 配列数式を使用する場合の端緒

とあり、速度面での優位性が無いことが判明してしまいました。
ただ、どの程度処理速度が違うのか調べてみましょう。

テスト方法

まず計測するマクロがこちらです。
E1に乱数を1000回挿入してTimerで時間を計測する簡単なものです。

Sub run()
    Dim time As Double
    Dim idx As Long
    time = Timer
    For idx = 1 To 1000
        Me.Range("E1").Value = Rnd()
    Next
    Debug.Print Timer - time
End Sub

そして通常の数式がこちら、
E1の値が0.5を超えるときはA列を、以下の時はB列をC列へ表示しています。

こちらは配列数式、やっていることは同じです。

結果

数式の計算以外の処理が極力入らないようシートを最小化してテストした結果が下の表になります。

通常の数式配列数式
10.25781250.2421875
20.25781250.24609375
30.261718750.23828125
40.261718750.2421875
50.25781250.2421875
60.261718750.2421875
70.25781250.23828125
80.25781250.2421875
90.261718750.2421875
100.261718750.2421875
平均0.2597656250.241796875

配列数式の方が速いじゃないか…

コメント