Maniac

VBA高速化検証:配列への代入方法

配列に値を代入するには、1つずつ代入する方法の他に、ケースによっては一括で代入することができます。次のコードが一つの例です。

Sub Sample()
    Dim i As Long
    Dim lngBs(1 To 10) As Long
    Dim lngArr1(1 To 10) As Long
    Dim lngArr2() As Long
    For i = 1 To 10
        lngBs(i) = i
    Next
    '配列に1つずつ代入
    For i = 1 To 10
        lngArr1(i) = lngBs(i)
    Next
    '配列に一括代入
    lngArr2 = lngBs
    '確認
    MsgBox lngArr1(10) & " " & lngArr2(10)
End Sub

配列に1つずつ代入する場合は、繰り返し処理が必要になるので、一括で代入するより時間がかかることは想像できます。では、代入方法の違いによりどの程度の差が生まれるのか。
今回は配列への値の代入方法の違いを比較することにしました。併せて、次元の数による違いも比較しました。

下の表とグラフは、私の端末※でスピード検証テストを行った結果です。
※Windows10 Intel(R) Core(TM) i5-7200U CPU @2.50GHz 2.71Ghz / Excel2010


結果

・一括で代入が圧倒的に速い。1次元配列、配列数1000で約30倍
・一括で代入は、次元が増えてもスピードはあまり変わらない
・1つずつ代入は、次元が増えると時間がかかる

結果から

予想通り、一括で代入する方法が高速であった。配列数1000で約30倍の差があることに驚いた。
一括で代入する方法は、次元が増えても計測にかかる時間がほぼ変わらないのは意外でした。
1つずつ代入は、次元が増えると時間がかかるのは想像通りでした。時間がかかるのは、繰り返し処理が増えることに加え、以前検証した、配列変数の次元による違いだと考えられます。

配列に一括で代入できるような場合は、一括代入が必須です。

※今回のテストは私の端末のみの検証であり、どのような環境でも、同様の結果を保証するものではありません。
※Excelのバージョンで結果に違いが出る事が考えられます。


検証テストコードとファイル

●検証テストのコード [ Code ]
●Excel97-2010 [Test_File] 検証テストを行ったファイルです。

ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.