こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、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」をすることで、途中の画面更新をせずに高速で処理を動かすことができます。
詳しくは以下記事で解説しているので、気になる方は見てみてくださいね!
自動計算を手動計算にする
Excelでセルに関数をたくさん使っている場合、セルに値を書き込むだけで処理に時間がかかってしまうことがあります。そのため、画面更新と同様に処理の最初で手動計算にするのがおすすめです!
Sub Test() '画面更新停止 Application.Calculation = xlCalculationManual '手動計算 'メイン処理******************************** ‘セルの値を使って計算したいときのみ再計算実行 Application.Calculate ‘***************************************** '画面更新再開 Application.Calculation = xlCalculationAutomatic '自動計算 End Sub
「xlCalculationManual」で手動計算、「xlCalculationAutomatic」で自動計算にすることができます。
また、処理の途中で関数で計算したセルの値を使いたい場合は、「Application.Calculate」で再計算すればOKです。無駄な計算が減るので、処理を高速化することができます。
CSV読み込みはQueryTablesメソッドを使う
ファイルを読み込む方法として有名なのが、Openメソッドを使った方法です。ただ、Openメソッドは使いやすと引き換えに処理がすこし遅いため、大規模なデータを取り込むときは、処理に時間がかかってしまいます。
そんな時におすすめなのが、QueryTablesメソッドです。以下で詳しく使い方について解説しているので、気になる方は見てみてくださいね!
無駄なセル選択をやめる
セルのデータをコピー・ペーストする場合、次のように書いている人がいます。
サンプルコード:
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度のみのコピーでしたが、ループ処理で何度もコピーするような処理を作っていた場合処理の速度が大きく変わってくるので、覚えておくのがおすすめです。
処理時間を計測する方法
ここまで、処理を高速化する方法について解説してきましたが、実際に速くなっているか確認したいですよね。そんな方向けに、処理速度を計測する方法を以下で解説しています。遅い処理を調べる方法についても解説しているので、気になる方は見てみてくださいね!
補足:Excelの関数を使うときは要注意
ExcelのセルでVlookup関数やSumIf関数などの関数を使うとき、範囲の指定に列全体、行全体を設定していると処理が重たくなります。
手動計算に変更すれば処理実行時は速くなるかもしれませんが、処理の最後で再計算したときに時間がかかってしまうため、結果的に処理が遅くなる原因になりがちです。
そのため、処理が遅い時は「Excelの関数を改善できないか」考えてみるのも一つの手です。VBAだけでなくExcel全体で改善方法を探すことが重要なので、ぜひ意識してみてくださいね。
まとめ
今回は、VBAで処理を高速化する方法について解説しました。VBAを書いていると処理が遅くなってしまうケースはよくあります。
後から改善できるものはすればよいのですが、できることなら最初から速く動くコードを書きたいですよね。今回紹介した方法はどれもすぐ取り入れることができるので、ぜひ使ってみてくださいね!