見出し画像

EXCEL VBA Timer関数による処理時間測定 配列を利用したコードではステップ数はあまり大きな問題にはならない

 VBAは配列を利用すると高速化します。またコードを書くときはできる限りステップを短くするようにしますが、それによってわかりにくくなり、1年後には自分でもわからないということもあります。職場でコードを共有するときはわかりやすさと速さのバランスをどのあたりでとるか悩ましいところです。配列を利用してもわかりやすさを犠牲にしてコードを短縮する必要があるのか実験しました。比較したのは次の2つのプログラムです。上は配列を利用したもの、下はcellで書いたものです。1000行500列に数字を埋めるだけの単純なもので、行数を変化させて処理時間を計測しました。詳細は動画をご覧ください。

Private Sub rennsyu()

開始時刻 = Timer
Range("a1:SF1000") = ""
a = Range("a1:SF1000")
For i = 1 To 1000
For j = 1 To 500

a(i, j) = i & j

Next j
Next i

Range("a1:SF1000") = a
終了時刻 = Timer
処理時間 = 終了時刻 - 開始時刻
MsgBox 処理時間

End Sub
Private Sub rennsyuu()

開始時刻 = Timer

Range("a1:SF1000") = ""

For i = 1 To 1000
For j = 1 To 500

Cells(i, j) = i & j

Next j
Next i
終了時刻 = Timer
処理時間 = 終了時刻 - 開始時刻
MsgBox 処理時間
End Sub

結果

 グラフの横軸は処理した行数、縦軸は所要時間(秒)ですが、ご覧の通りCellsで書くと処理量と所要時間は正比例しますが、配列を使用した場合は無視できる程度の差です。プログラムの短縮に神経質にならずにすみそうです。

画像1