こんにちは!ぐーです。
普段、Excel VBAを使って業務効率化をしていると、「とにかく処理を高速化したい」と考えることも多いのではないでしょうか?
しかし実は、あえて処理を一時停止させる「待機」のスキルが、自動化の成功を左右する重要な鍵となる場面が少なくありません。
今回は、安定したツール作りには欠かせない「待機処理」について、Application.WaitとSleep関数という2つの主要な手法をご紹介します。
なぜ、プログラムに「待ち時間」が必要なのでしょうか?
例えば、Webスクレイピングで情報を収集するツールを運用する場合を考えてみてください。
ページの読み込みが完了する前にVBAが取得命令を出してしまうと、対象のデータが見つからず、実行エラーが発生してしまいます。
また、外部システムと連携する際も、システムの応答速度に合わせて適切に待機を挟まなければ、処理の同期が取れずに予期せぬエラーを引き起こします。
PCやネットワークの処理速度に合わせてプログラムの歩調を整えることが、堅牢で安定したツールを構築するための不可欠な要素となります。
手軽に導入できるApplication.Wait
まずは、Excelに標準で備わっている機能を利用する方法です。
- 特徴: 設定が簡単。直感的に使える。
- 単位: 1秒単位(これより細かく設定できません)。
- デメリット: 待機中はExcelが完全に固まります(操作不能)。
「とりあえず3秒待ちたい!」という時はこれで十分です。
コピペで使えるコード(Wait版)
Sub WaitSample()
' 現在時刻から3秒後まで停止する
Application.Wait (Now + TimeValue("00:00:03"))
MsgBox "3秒待ちました!"
End Sub
精密な制御を可能にするSleep関数
次は、Windowsのシステム機能を呼び出して利用する方法です。実務レベルの複雑な処理では、こちらが好まれます。
- 特徴: モジュールの先頭に「宣言」が必要。
- 単位: ミリ秒単位での指定が可能 (1000ミリ秒 = 1秒)。
- メリット: 「0.5秒待ちたい」といった細かい調整が可能。
Webサイトの巡回など、「1秒待つと遅すぎるが、待たないとエラーになる」といった繊細な制御が必要なシーンで威力を発揮します。
コピペで使えるコード(Sleep版)
このコードは念のため、32bit版および64bit版のどちらのExcel環境でも動作する記述になっています。
' --- ここをモジュールの1番上に貼り付けてください ---
#If VBA7 Then
' 64bit版・新しいExcel用
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
' 32bit版・古いExcel用
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
' --------------------------------------------------
Sub SleepSample()
' 500ミリ秒(=0.5秒)停止する
Sleep 500
MsgBox "0.5秒待ちました!"
End Sub
まとめ
どちらを使うか迷ったら、以下の基準で選んでみてください。
| 特徴 | Application.Wait | Sleep関数 |
| 手軽さ | ◎ そのまま記述可能 | △ 宣言が必要 |
| 時間の精度 | 1秒単位 | 1/1000秒単位 |
| おすすめ場面 | 簡易的なテスト実行、単純な待機 | スクレイピング、高速ループ |
「待つ」という処理を適切に組み込むだけで、実行エラーは劇的に減少し、ツールの安定性は格段に向上します。
処理の速さだけでなく、システムの歩調に合わせた「余裕」を持たせることで、より信頼されるツール作りを目指しましょう!

コメント