PR

VBAマクロ 高速化② - 値だけ処理したら231倍速くなった

VBAまずこれから
スポンサーリンク

インプットデータをコピーするとき、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エキスパートで深めることができます。

コメント

タイトルとURLをコピーしました