VBAコーディングパターン:VBAパフォーマンスの向上
この記事では、VBAのパフォーマンスを向上させる方法について説明します。
最後の記事では、VBA Range Loop方法を比較し、Variant Arrayを利用する方法が最速であることを確認しました。
VBAコーディングパターン:Range Loop - 読み取り(Read)
1. パフォーマンス関連のVBAグローバル変数
以下は変数全体の要約です。
各変数について内容を見てみましょう。
1.1。 Application.ScreenUpdating
画面更新の可否を制御する変数であり、デフォルト値はTrue(画面更新)である。
- VBAコード実行中に画面更新(File切替、Sheet切替、Cell値設定など)をしないように設定して性能向上
- 画面更新が多い場合に有効
- コードエントリ部分にFalseに設定し、コード終了部分にTrueに戻す
1.2. Application.DisplayAlerts
警告ウィンドウを表示するかどうかを制御する変数であり、デフォルト値はTrue(警告ウィンドウ表示する)である。
- VBAコードの実行中に警告ウィンドウ(変更したファイルを閉じようとしたときに「保存しますか」を確認するウィンドウなど)を表示しないように設定して、コードが途中で停止しないようにする
- コードエントリ部分にFalseに設定し、コード終了部分にTrueに戻す
1.3。 Application.Calculation
式の計算方法を制御する変数であり、デフォルト値はxlCalculationAutomatic(自動計算)です。
- VBAコードの実行中に数式(COUNTIF、VLOOKUPなど)の計算を自動的に実行しないようにする
- 数式が多い場合は効果的です
- コードエントリ部分にxlCalculationManualに設定し、コード終了部分にxlCalculationAutomaticに戻す
1.4。 Application.EnableEvents
イベント処理の可否を制御する変数であり、デフォルト値はTrue(イベント処理する)である。
- Worksheet_Changeなどのイベントが発生したときに処理するコードの実行を防ぐ
- イベント処理するコードがある場合に効果的
- コードエントリ部分にFalseに設定し、コード終了部分にTrueに戻す
2. 例コード
2.1。適用が適切な場合
VBAコードに次のケースが含まれている場合は、この記事で説明されているパフォーマンス向上方法を適用するのに適しています。
- ファイル/シートを新しく作成する場合
- 現在のシートを別のシートに切り替える場合
- あるシート内で現在選択されているセルを変更し続ける場合
- 数式が多く、計算に時間がかかるなど、複雑な演算を実行する場合
このような場合は、VBAコードの実行がしばらく中断され、画面を更新したり、数式を計算するなど、Excelが必要なイベントを処理する。 VBAコードが遅くなる最も代表的なケースがまさに画面更新だ。 VBAコードの実行中に他のイベント処理はしばらく保留になり、VBAコードの実行が終了した後に他のイベントを処理することでパフォーマンスを向上させることができます。
2.2.例コード
処理するコードに入る前にグローバル変数を性能向上値に設定し、処理コード終了後に元の値に変更する。次のコードを参考にしてください。
'코드 진입 부분 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False Application.DisplayAlerts = False '실행할 코드가 들어 갈 부분 ... '코드 종료 부분 Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.DisplayAlerts = True
以上で性能向上のためのVBAコーディングパターンについて調べた。気になる点はコメントを残してほしい。