〖ExcelVBA・マクロ〗処理を一時停止する方法まとめ|Application.Wait と DoEvents の違いと正しい使い分け

処理を一時停止する方法まとめ ExcelVBA

ExcelVBAでマクロを書いていると、次のような場面に出くわすことがあります。

  • 処理の途中で「少し待ちたい」
  • 画面を更新させながら処理を続けたい
  • 「固まったように見える」状態を回避したい

そんなときに登場するのが Application.WaitDoEvents です。

ただしこの2つ、名前はよく聞くものの
役割がまったく違うため、使い分けを間違えると逆に不具合の原因になります。

この記事では、初心者向けに 「何が違うのか」「どんな場面で使うべきか」を実例つきで解説します。


スポンサーリンク
スポンサーリンク

結論:Wait と DoEvents は目的がまったく違う

命令目的特徴
Application.Wait処理を止める指定時間、完全に停止
DoEventsExcelに処理を返す画面更新・操作を受け付ける

「待つ」= Wait、 「固まらないようにする」= DoEvents と覚えると分かりやすいです。


Application.Waitとは?(完全に止まる)

Application.Wait は、指定した時刻まで処理を完全に停止します。

Application.Wait Now + TimeValue("00:00:03")

この例では、3秒間マクロが止まります。
この間、次の行の処理は一切実行されません。

よくある使いどころ

  • 外部処理の完了待ち
  • 連続処理の間に間隔を空けたいとき
  • 人が画面を確認する時間を作りたいとき

注意点

  • Wait中は操作できない
  • 画面も更新されにくい
  • 長時間使うと「フリーズした」と誤解されやすい

DoEventsとは?(Excelを固まらせない)

DoEvents は、処理を止める命令ではありません。
一時的にExcelへ処理を返す命令です。

DoEvents

これを入れると、

  • 画面更新が反映される
  • Excelが「応答なし」になりにくい
  • キャンセル操作を受け付けやすくなる

よくある使いどころ

  • 大量ループ処理
  • 進捗表示(セルやステータスバー)
  • 「固まっていない感」を出したいとき

実例①:Waitを使った単純な待機処理

Sub Sample_Wait()

    MsgBox "3秒待ちます"
    Application.Wait Now + TimeValue("00:00:03")
    MsgBox "再開しました"

End Sub

確実に「止めたい」場合は、Waitが一番シンプルです。


実例②:DoEventsを使って固まらないループ

Sub Sample_DoEvents()

    Dim i As Long

    For i = 1 To 100000
        Cells(1, 1).Value = i
        DoEvents
    Next i

End Sub

DoEventsを入れないと、処理中にExcelが固まったように見えます。
入れることで、画面が更新され続けます。


WaitとDoEventsを組み合わせるパターン(実務向け)

「少し待ちつつ、固まらせたくない」場合は次の書き方が便利です。

Sub Sample_WaitWithDoEvents()

    Dim endTime As Double
    endTime = Timer + 3 ' 3秒待つ

    Do While Timer < endTime
        DoEvents
    Loop

    MsgBox "完了"

End Sub

この方法なら、待機中も操作・画面更新が可能です。


よくある勘違い

❌ DoEventsは待機命令ではない

DoEventsを1回書いても「待ち時間」は発生しません。
あくまで「Excelに処理を返す」だけです。

❌ Waitは画面更新用ではない

Wait中にDoEventsが無いと、画面はほぼ止まります。


おすすめの使い分けルール

  • 確実に止めたい → Application.Wait
  • 固まらせたくない → DoEvents
  • 両方必要 → Timer + DoEvents

まとめ:目的を間違えなければトラブルは防げる

  • Waitは「停止」
  • DoEventsは「解放」
  • 混同するとフリーズや暴走の原因になる

処理速度・安定性・操作性を両立させるためにも、 この2つの役割の違いはぜひ押さえておきましょう。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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