インプットデータをコピーするとき、copy、pasteメソッドを使うと時間がかかります。これはセルの色や罫線など色々な情報を全てコピペしているからです。
計算処理上、値だけが必要な際には、コピーペーストをやめることで高速化ができます。
マクロ記録機能を使って作ったものが遅い場合、これが原因であることが多いです。
高速化の効果測定に使う処理
高速化の効果測定ベンチマーク
処理前の速度は下記記事の「11.55秒」をベンチマークにします。
今回は罫線を除いて値だけをコピーすることで、どのくらいの処理速度差が出るのか計測します。
COPY, PASTEをやめてみる
この形でセルのvalueだけを変更します。罫線や色、フォントなどの情報を変更しない分、高速に処理できます。
Cells(i, j + 5).Value = Cells(i, j).Value
ソースコード
Option Explicit
Sub test_proc()
Dim startTime As Double
Dim endTime As Double
Dim responceTime As Double
startTime = Timer
'メイン処理
Dim i, j As Long
For i = 1 To 100
For j = 1 To 4
Cells(i, j + 5).Value = Cells(i, j).Value
Next j
Next i
endTime = Timer
responceTime = endTime - startTime
MsgBox (responceTime & "秒")
End Sub
測定結果 処理速度231倍の効果
測定結果は0.046秒でした。
11.55秒→0.05秒なので、処理速度は231倍です。

おまけ 100倍を処理してみる
あまりに速くなったので100行ではなく10000行まで、100倍の処理量で実行してみました。
100倍の量にしたとはいえ、必ずしも処理時間も100倍になる訳ではありません。
0.05秒→2.22秒なので45倍くらいでした。

まとめ
- COPY, PASTEを使うと全ての値をコピーペーストする分時間がかかる
- valueのみ、など必要なプロパティのみをコピーすると高速化できる
- データ量が100倍になっても実行時間は45倍程度
このやり方はVBAエキスパートで深めることができます。
リンク
コメント