スポンサードリンク

VBA/マクロの処理が遅い、高速化したい時.copyを使うな

スポンサードリンク

VBA/マクロで大量の繰り返し処理を実行させたい時など、その処理が高速であればあるほど良いですよね。

z404

    (速いといえば、ウサイン・ボルト選手ですねー)

処理を高速化する一般的な方法として、画面出力や自動計算、イベント表示させない方法があります。

 ===ここから===
‘イベントをOFFにする
Application.EnableEvents = False
‘計算を手動にする
Application.Calculation = xlCalculationManual
‘画面出力をOFFにする
Application.ScreenUpdating = False
 
(本文)
 
‘イベントをONにする
Application.EnableEvents = True
‘計算を手動にする
Application.Calculation = xlCalculationAutomatic
‘画面出力をONにする
Application.ScreenUpdating = True
 ===ここまで===

でも、これをしてもまだ処理に時間がかかると思った場合、.copyを使った書き方をしていないか確認してみてください。

VBA/マクロで.copy を使うと処理に時間がかかる

下記2つの書き方をご覧ください。

①.copyを用いて、A1セルの値をA2セルに入力する

Range(“A1”).Copy Range(“A2”)

②A2セルにA1セルの値を入力する

Range(“A2”) = Range(“A1”)
   

どちらも同じ結果になりますよね。

一見、これらの処理にかかる時間は変わらないように思えますが、実は何百回、何千回と繰り返し処理をする場合、実行結果が出るまでに大きな差が生まれます。

どれぐらい処理時間が短縮されるのか?

では、どれぐらい処理時間が短縮されるのか? なのですが、実行量とPCのスペックによって結果に大きな影響を与えてしまうため一概には言えませんが、おおよそ80%から90%の処理時間短縮を確認することができました。

z403

理由は、

①の場合、VBA/マクロとしては下記のような流れで処理をします

Rangeでコピー元のセル番号を認識

.copyでコピーを実施

スペースでその後何らかの処理をすると認識

Rangeでコピー元のセル番号を認識

そのセル番号に貼り付けを実施

②の場合、左辺に右辺を入力する

だけです。

簡単すぎて教えてくれない、気が付きにくい盲点

z402

繰り返しになりますが①と②の処理は、同じ結果を得ることができます。

また、何百回、何千回と繰り返し処理をするような場合でなければ、どちらの書き方をしてもそれほど気にはならないでしょう。

だからこそ、いざという時に「処理が遅い・・・」という事態が発生して、地味にストレスが溜まっていきます。

①から②の書き方への更新は、割とすぐに書き換えられると思いますのでぜひ試してみてください!!

スポンサードリンク

シェアする