【マクロVBA】Excelの待機処理と解除方法

マクロVBA

処理に時間がかかるプログラムを作ったとき、意識すべきは下記の二点です。

  1. 処理をなるべく早くする
  2. 処理中であることが利用者にわかるようにする(Excelの処理中時に現れるクルクル(昔の砂時計))

これらをVBAで実現するためには、明示的にプログラムを書く必要があります。以下ではそのソースコードを紹介します。

ウォルト
ウォルト

これを普段から意識できると、できるプログラマって感じがします😊

ソースコード

ソースコードは下記になります。

処理開始時に書く「待機処理」のプログラムと、処理終了時に書く「待機処理解除」の二つを記載しています。

'-------------------------------------------
'概要:待機処理
'-------------------------------------------
Sub ProcessStart(Optional dummu As String = "Dummy")

    Application.ScreenUpdating = False
    Application.Cursor = xlWait

End Sub

'-------------------------------------------
'概要:待機処理解除
'-------------------------------------------
Sub ProcessEnd(Optional dummu As String = "Dummy")

    Application.ScreenUpdating = True
    Application.Cursor = xlDefault

End Sub

ソースコードの解説

ソースコードを見ると、「Application.ScreenUpdating」と「Application.Cursor」の二つの値を変えているのがわかると思います。それぞれ意味は次の通りです。

  1. Application.ScreenUpdating
    • True
      • 画面の更新機能をONにします。Excelのデフォルトの状態ですが、画面更新は実は動きが遅いため、プログラムが動いているときに画面更新が発生すると実行処理が遅くなってしまいます。
      • 通常、プログラム内でFalse設定にした場合、終了時に設定値をTrueに戻してあげます。
    • False
      • 画面の更新機能をOFFにします。画面更新がないため、処理が高速になります。
      • 長い処理が発生する場合や、画面のちらつきが気になるような場合に、処理開始時にFalseを設定します。
  2. Application.Cursor
    • xlDefault
      • Excelのカーソルをデフォルト設定(矢印)に戻します。プログラム内でクルクル(砂時計)が出る設定にした場合、終了時に設定値をxlDefaultに戻してあげます。
    • xlWait
      • Excelのカーソルを処理状態(クルクル)にします。長い処理が発生する場合等、利用者に裏でプログラムが動いていることを明示するために使用します。

実際の動き

コメント

タイトルとURLをコピーしました