【ExcelVBA入門】処理の実行時間を高速化する方法を徹底解説!

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAで処理を高速化するために意識していることはありますか? VBAは気づいたら処理が遅くなっていることがよくあるため、高速化テクニックを知っておくと便利です。

そこで今回は、

  • 処理を高速化する方法
  • 処理時間を計測する方法
  • Excel関数を使うときの注意点

といった基礎的なことから、応用的な方法まで、徹底的に解説します!

VBAで処理高速化するテクニック

VBAで処理を高速化するテクニックについて、解説します!

画面更新をOFFにする

最初は、画面更新をOFFにする方法です。VBAで処理を書くときは、別シートからデータコピー、シート追加、シート削除、ソート実行など、画面が動く処理を使うケースがよくありますよね。

そのため、画面更新をOFFにして処理結果の画面だけを表示するようにすると、画面表示分の時間を短縮できるのでおすすめです。

Sub Test()
  '画面更新停止
  Application.ScreenUpdating = False
 
  'メイン処理********************************

  ‘*****************************************
 
  '画面更新再開
  Application.ScreenUpdating = True
End Sub

処理の最初に「Application.ScreenUpdating = False」で画面更新を停止して、処理の最後に「Application.ScreenUpdating = True」をすることで、途中の画面更新をせずに高速で処理を動かすことができます。

詳しくは以下記事で解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】画面の更新を停止して処理を高速化する方法とは
更新日 : 2020年4月15日

自動計算を手動計算にする

Excelでセルに関数をたくさん使っている場合、セルに値を書き込むだけで処理に時間がかかってしまうことがあります。そのため、画面更新と同様に処理の最初で手動計算にするのがおすすめです!

Sub Test()
  '画面更新停止
Application.Calculation = xlCalculationManual      '手動計算

 
  'メイン処理********************************
  ‘セルの値を使って計算したいときのみ再計算実行
  Application.Calculate 
  ‘*****************************************
 
  '画面更新再開
  Application.Calculation = xlCalculationAutomatic  '自動計算

End Sub

「xlCalculationManual」で手動計算、「xlCalculationAutomatic」で自動計算にすることができます。

また、処理の途中で関数で計算したセルの値を使いたい場合は、「Application.Calculate」で再計算すればOKです。無駄な計算が減るので、処理を高速化することができます。

CSV読み込みはQueryTablesメソッドを使う

ファイルを読み込む方法として有名なのが、Openメソッドを使った方法です。ただ、Openメソッドは使いやすと引き換えに処理がすこし遅いため、大規模なデータを取り込むときは、処理に時間がかかってしまいます。

そんな時におすすめなのが、QueryTablesメソッドです。以下で詳しく使い方について解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】QueryTablesメソッドで高速にファイルを読み込む方法
更新日 : 2019年5月23日

無駄なセル選択をやめる

セルのデータをコピー・ペーストする場合、次のように書いている人がいます。

サンプルコード:

Sub Test()
    ActiveSheet.Range(“A1”).Select
    Selection.Copy
    ActiveSheet..Range(“A2”).Select
    ActiveSheet.Paste
End Sub

「A1セルを選択 → セルをコピー → A2セルを選択 → コピーした値を貼り付け」の流れで書いているのですが、コピー処理は1行で書くことで、シンプルかつ高速に処理を動かすことができます。

改善後のサンプルコード:

Sub Test()
    ActiveSheet.Range(“A1”).Copy Destination:=ActiveSheet.Range(“A2”)
End Sub

この例では1度のみのコピーでしたが、ループ処理で何度もコピーするような処理を作っていた場合処理の速度が大きく変わってくるので、覚えておくのがおすすめです。

処理時間を計測する方法

ここまで、処理を高速化する方法について解説してきましたが、実際に速くなっているか確認したいですよね。そんな方向けに、処理速度を計測する方法を以下で解説しています。遅い処理を調べる方法についても解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】処理時間を計測するためのTimer関数の使い方とは
更新日 : 2019年5月3日

補足:Excelの関数を使うときは要注意

ExcelのセルでVlookup関数やSumIf関数などの関数を使うとき、範囲の指定に列全体、行全体を設定していると処理が重たくなります。

手動計算に変更すれば処理実行時は速くなるかもしれませんが、処理の最後で再計算したときに時間がかかってしまうため、結果的に処理が遅くなる原因になりがちです。

そのため、処理が遅い時は「Excelの関数を改善できないか」考えてみるのも一つの手です。VBAだけでなくExcel全体で改善方法を探すことが重要なので、ぜひ意識してみてくださいね。

まとめ

今回は、VBAで処理を高速化する方法について解説しました。VBAを書いていると処理が遅くなってしまうケースはよくあります。

後から改善できるものはすればよいのですが、できることなら最初から速く動くコードを書きたいですよね。今回紹介した方法はどれもすぐ取り入れることができるので、ぜひ使ってみてくださいね!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。