スライドショー

【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入門】画面の更新を停止して処理を高速化する方法とは
更新日 : 2019年5月22日

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

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

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

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