VBAの「待つ」技術でエラーを激減!Application.WaitとSleepの使い分け徹底解説

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
普段、Excel VBAを使って業務効率化をしていると、「とにかく処理を高速化したい」と考えることも多いのではないでしょうか?

しかし実は、あえて処理を一時停止させる「待機」のスキルが、自動化の成功を左右する重要な鍵となる場面が少なくありません。 

今回は、安定したツール作りには欠かせない「待機処理」について、Application.WaitとSleep関数という2つの主要な手法をご紹介します。

【業務効率化】VBAの記事を見る 

なぜ、プログラムに「待ち時間」が必要なのでしょうか?

例えば、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.WaitSleep関数
手軽さ◎ そのまま記述可能△ 宣言が必要
時間の精度1秒単位1/1000秒単位
おすすめ場面簡易的なテスト実行、単純な待機 スクレイピング、高速ループ

「待つ」という処理を適切に組み込むだけで、実行エラーは劇的に減少し、ツールの安定性は格段に向上します。

処理の速さだけでなく、システムの歩調に合わせた「余裕」を持たせることで、より信頼されるツール作りを目指しましょう!

【業務効率化】VBAの記事を見る 

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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