VBAコーディングパターン:VBAパフォーマンスの向上

この記事では、VBAのパフォーマンスを向上させる方法について説明します。

最後の記事では、VBA Range Loop方法を比較し、Variant Arrayを利用する方法が最速であることを確認しました。

VBAコーディングパターン:Range Loop - 読み取り(Read)


1. パフォーマンス関連のVBAグローバル変数

以下は変数全体の要約です。

성능 관련 VBA 전역 변수
パフォーマンス関連の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コーディングパターンについて調べた。気になる点はコメントを残してほしい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ja日本語