【2026年8月最新】VBAのSleep関数(API)とApplication.Waitで処理を止める方法|32bit/64bit対応の正しい書き方

「VBAのマクロを組んだけど、次の処理が早すぎて前の処理が終わる前に走ってしまう」「外部システムへの書き込みが終わる前にExcel側が先に進んでエラーになる」——こうした処理速度のズレに悩んで、この記事にたどり着いた方は多いはずです。

VBAでは、意図的に処理を一時停止させる方法としてSleep関数(Windows APIの呼び出し)Application.Waitメソッドの2つがよく使われます。ただしこの2つ、書き方を少しでも間違えると「64bit環境でコンパイルエラーになる」「秒数の指定を誤って1日待ってしまう」といった、地味に厄介なトラブルを引き起こします。

実際、VBAのSleep/Wait周りはネット上の解説でも情報が古かったり、32bit/64bit対応の記述が抜けていたりするケースが少なくありません。この記事では、2026年時点のOffice環境を前提に、宣言方法・使い方・実務でのハマりどころを正確に整理します。あわせて、そもそも「VBAを自分で書かずに同じことを実現する」という非エンジニア向けの選択肢についても、記事後半でご紹介します。

代表菅澤 代表菅澤
VBAのSleep関数って、実は書き方を一つ間違えるだけで「64bitのOfficeだと動かない」という相談を今でもよくいただきます。今日はここを正確に、かつ実務目線で整理していきます。
AI鬼管理山崎 AI鬼管理山崎
技術的な正確さを最優先しつつ、「結局どっちを使えばいいのか」「非エンジニアはどう付き合えばいいのか」まで、実務に落とし込んで解説していきますね。

この記事を最後まで読むと、次の6つが明確になります。

✔️Sleep関数を32bit/64bit両方のOfficeで動くように宣言する正しい書き方
✔️Application.Waitメソッドの正しい引数の指定方法(秒指定・時刻指定の考え方)
✔️SleepとWait、どちらを使うべきかの判断基準
✔️現場で実際に起きたハマりどころ5つとその回避策
✔️弊社GENAIの実務データから見える「待機処理」の属人化リスク
✔️VBAを書けなくても同じ調整をAIに任せるという非エンジニア向けの選択肢
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年8月最新】VBAのSleep関数(API)とApplication.Waitで処理を止める方法|32bit/64bit対応の正しい書き方
VBAマクロの処理を一時停止させるSleep関数(Windows API宣言)とApplication.Waitメソッドの正しい書き方を解説。32bit/64bit Office対応の宣言方法、現場でハマりやすい落とし穴、そしてマクロ調整を非エンジニアがAIに任せる方法まで、弊社の実運用データをもとに紹介します。

01 VBAで「処理を止めたい」が発生する場面 なぜマクロに待ち時間の調整が必要になるのか

まず前提を揃えておきます。VBA(Visual Basic for Applications)は、Excel・Word・AccessなどMicrosoft Officeに組み込まれているプログラミング言語です。マクロを組んで日々の定型作業を自動化している経理担当・営業事務・総務担当の方は多いと思いますが、その中で頻繁に相談を受けるのが「処理を一時的に止めたい」というニーズです。

📚 用語解説

VBA (Visual Basic for Applications):Microsoft Officeアプリケーション(Excel・Word・Access等)に組み込まれたプログラミング言語。「マクロの記録」機能で自動生成されたコードを編集したり、ゼロから業務自動化のスクリプトを書いたりするのに使われます。

📚 用語解説

マクロ:VBAで書かれた一連の処理手順を指す言葉。「毎日決まった操作を自動でやってくれるボタン」のようなイメージで捉えると分かりやすいです。ボタン一つでVBAコードが順番に実行され、定型業務を代行してくれます。

1-1. 「処理が早すぎて追いつかない」という典型パターン

具体的には、以下のような場面で「処理を止める」必要が出てきます。

✔️別のアプリケーション(ブラウザ・他のExcelファイル等)を開いた直後に、まだ起動しきっていない状態で次の操作コードが走ってエラーになる
✔️外部システムやデータベースへの書き込み処理の直後、反映が終わる前に読み込み処理を実行してしまい、古いデータを拾ってしまう
✔️ファイルの保存・変換処理が完了する前に、そのファイルを開こうとしてエラーになる
✔️大量データを1件ずつAPIやWebサイトに送信する処理で、送信間隔を空けないと相手側から接続を拒否される(レート制限)
✔️メッセージボックスを一定時間だけ自動的に表示して、自動で消したい

これらはすべて、「Excel側の処理速度」と「外部の処理が完了するタイミング」がズレていることが原因です。VBAは基本的に「上から下へ、できる限り速く」実行されるため、意図的に「ここで少し待つ」という指示を入れてあげないと、外部処理の完了を待たずに突っ走ってしまいます。

💡 待機処理が必要かどうかの見極め方

「エラーメッセージの内容が『オブジェクトが見つかりません』『ファイルが使用中です』『接続がタイムアウトしました』のいずれかに該当する」場合、処理速度のズレが原因である可能性が高いです。まずは疑わしい処理の直前に数秒の待機を入れてみて、エラーが解消するか検証するのが定石です。

1-2. VBAで「処理を止める」ための2つの方法

VBAで処理を意図的に止める方法は、大きく分けて2つあります。1つはWindows APIのSleep関数を呼び出す方法、もう1つはExcelに標準搭載されているApplication.Waitメソッドを使う方法です。次章から、それぞれの正しい書き方を順番に解説していきます。

AI鬼管理山崎 AI鬼管理山崎
ネット上の解説記事の中には、64bit版Officeでは動かない古い書き方をそのまま載せているものも見かけます。まずは正確な宣言方法から押さえていきましょう。

02 Sleep関数(Windows API宣言)の正しい書き方 32bit/64bit Officeどちらでも動く宣言方法

Sleep関数は、VBA自体の標準機能ではありません。Windowsの中核部分(kernel32.dll)が提供している機能を、VBAから呼び出して使う形になります。これをWindows API(Application Programming Interface)の呼び出しと呼びます。

📚 用語解説

Windows API / kernel32.dll:Windows OSが標準で提供している機能(ファイル操作・メモリ管理・タイマー処理など)の呼び出し窓口。kernel32.dllはその中でも最も基本的な機能を収めたファイルで、SleepやGetTickCountといった関数が含まれています。VBAからは「Declare」という宣言文を使ってこれらの関数を呼び出せるようにします。

2-1. 32bit/64bit両対応のDeclare文

Sleep関数を使うには、コードの先頭(モジュールの宣言セクション)で以下のように宣言する必要があります。ポイントは、32bit版OfficeとOfficeとで宣言の書き方が異なるため、両方に対応させる条件分岐を入れることです。

#If VBA7 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub SleepSample()
    Sleep 3000    ' 3000ミリ秒 = 3秒間、処理を止める
    MsgBox "3秒待ちました"
End Sub

この書き方が正しい理由を説明します。VBA7は、Office 2010以降で導入されたVBAのバージョン定数です。Office 2010以降(64bit版を含む)では、API宣言にPtrSafeキーワードを付けることが必須になりました。一方、それより古いOffice(VBA7非対応の環境)では、PtrSafeというキーワード自体が存在しないため、これを書くとエラーになります。

📚 用語解説

PtrSafe:VBA7(Office 2010以降)で追加された宣言キーワード。「このAPI宣言は64bit環境でも安全に動作します」という意味を示すために、Declare文に付与します。VBA7未満の古いOfficeにはこのキーワード自体が存在しないため、条件分岐(#If VBA7 Then)で環境ごとに宣言を出し分けます。

📚 用語解説

ByVal:「値渡し」を意味するVBAのキーワード。引数の実体(コピー)を渡すという意味で、呼び出した関数側でその値を書き換えても、呼び出し元の変数には影響しません。Sleep関数の引数dwMilliseconds(待機ミリ秒数)はByValで渡す仕様になっています。

つまり#If VBA7 Then 〜 #Else 〜 #End Ifという条件分岐を使うことで、どちらの環境でコードを開いても、該当する側の宣言だけが有効になるという仕組みです。VBA7に対応していない古い環境では、そもそも「#If VBA7」の判定がFalseになるため、PtrSafeという未知のキーワードが書かれた行自体が無視される、という理屈です。

⚠️ PtrSafeを付け忘れた場合に起きること

64bit版Officeで「Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)」とPtrSafeなしで宣言すると、コンパイル時に「ステートメントが無効です。ステートメントには PtrSafe 属性が必要です」といった趣旨のエラーが出ます。「昔のマクロを社内の新しいPCに移したら急にエラーが出た」という相談の多くは、この宣言の書き方が原因です。

2-2. なぜdwMillisecondsはLongのままでよいのか

64bit対応というと「変数の型もLongPtrに変えないといけないのでは?」と思う方もいますが、Sleep関数の引数dwMilliseconds(待機するミリ秒数)については、Long型のままで問題ありません。LongPtr型への変更が必要になるのは、メモリアドレスやウィンドウハンドルのように「ポインタサイズ(32bit環境と64bit環境で長さが変わる値)」を扱う引数の場合です。待機時間はあくまで数値(ミリ秒数)であり、ポインタではないため、型自体を変える必要はなく、変更が必要なのは宣言の先頭に付けるPtrSafeのみ、という点を正確に押さえておいてください。

💡 迷ったら宣言部分をそのままコピーして使う

Sleep関数の宣言は毎回自分で考える必要はありません。本記事の「#If VBA7 Then〜」のブロックをそのままモジュールの先頭に貼り付ければ、32bit・64bitどちらのOffice環境でも動作します。呼び出し部分(Sleep 3000 等)だけを自分の処理に合わせて書き換えれば十分です。

代表菅澤 代表菅澤
正直、この宣言部分を毎回手打ちしている経理担当の方を何人も見てきました。ここはコピペで固定していい部分なので、変数名や待機時間だけ調整すれば十分です。

03 Application.Waitメソッドの使い方 Excel標準機能だけで待機処理を組む方法

もう一つの方法がApplication.Waitです。こちらはWindows APIを呼び出す必要がなく、Excelの標準機能だけで完結するという大きなメリットがあります。API宣言のようなDeclare文が不要なので、コードがシンプルになります。

3-1. Application.Waitの基本構文

Application.Waitは「いつまで待つか(再開する時刻)」を指定する仕組みです。「何秒待つか」という期間を直接渡すのではなく、「この時刻になったら処理を再開する」という時刻(Date型の値)を渡す点が、Sleep関数との大きな違いです。

Sub WaitSample()
    ' 現在時刻から3秒後まで待機する
    Application.Wait Now + TimeValue("00:00:03")
    MsgBox "3秒待ちました"
End Sub

📚 用語解説

TimeValue:"00:00:03" のような時刻を表す文字列を、VBAが計算に使える時刻データ(シリアル値)に変換する関数。Application.Waitに「あと何秒待つか」を伝えるために、現在時刻(Now)にTimeValueで作った時間差を足し算する形で使うのが基本パターンです。

上記のコードは、「現在時刻(Now)」に「3秒(TimeValue("00:00:03"))」を足した時刻を計算し、その時刻になるまでマクロの実行を止めるという意味になります。「3秒間」という期間そのものを渡しているのではなく、「その時刻が来るまで」という到達目標を渡している点を正確に理解しておくと、応用が効きます。

3-2. 分・時間単位で待たせたい場合

TimeValueの文字列部分を変えるだけで、待機時間を自由に調整できます。

Sub WaitVariations()
    Application.Wait Now + TimeValue("00:00:10")   ' 10秒待つ
    Application.Wait Now + TimeValue("00:01:00")   ' 1分待つ
    Application.Wait Now + TimeValue("00:30:00")   ' 30分待つ
    Application.Wait Now + TimeValue("01:00:00")   ' 1時間待つ
End Sub
⚠️ TimeValueは1秒未満を正しく解釈できない

TimeValue("00:00:00.5")のように小数点で0.5秒を指定しようとしても、文字列として正しく解釈されない・意図通りに動かないケースがあります。1秒未満の細かい待機を確実に行いたい場合は、後述のSleep関数を使うか、Now関数に直接シリアル値(1日を86400秒として計算した分数)を足し算する方法を検討してください。中途半端な自己流の秒数指定は、環境によって挙動が変わるリスクがあるため、確信が持てない場合は「1秒以上の単位で丸める」のが安全です。

3-3. Application.Waitの見落としがちな仕様

Application.Waitで特に注意したいのが、「時刻」を渡す仕組みである以上、指定した時刻がすでに過去になっていると、実質的に待機せずそのまま処理が進むという点です。例えば「Now」を計算するタイミングと実際にコードが実行されるタイミングがズレていたり、PCの時刻設定がおかしかったりすると、意図した待機時間にならないことがあります。安定して動かすには、Application.Waitを呼び出す直前に時刻を取得し、その場で待機時間を計算する書き方を徹底することが大切です。

💡 Application.Waitのメリットは「宣言不要」

Sleep関数のような#If VBA7〜のDeclare文が一切不要で、Excelが動く環境であれば追加設定なしにそのまま使えます。「そもそもAPI宣言という概念に不安がある」という方は、まずApplication.Waitから試すのがおすすめです。

AI鬼管理山崎 AI鬼管理山崎
Application.Waitは「時刻を渡す」という発想がSleepと違うので、最初はここでつまずく方が多いです。「秒数を渡している」のではなく「いつになったら再開するか」を渡している、と覚えておくと迷いません。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 Sleep と Wait、結局どちらを使うべきか 用途別の判断基準を整理する

ここまでSleep関数とApplication.Waitの書き方を見てきましたが、「結局どちらを使えばいいのか」を整理します。

観点Sleep関数(API)Application.Wait
事前準備Declare文の宣言が必要(32bit/64bit分岐)宣言不要、そのまま使える
引数の考え方ミリ秒単位の「期間」を直接指定「再開する時刻」を計算して指定
最小単位の精度ミリ秒単位で細かく指定できる実務上は1秒単位が安全
対応OSWindows版Excelのみ(kernel32.dll依存)Windows版・Mac版どちらでも利用可
コードの見た目シンプルな1行呼び出し時刻計算を含むためやや長くなる

表からも分かる通り、ミリ秒単位の細かい調整がしたいか、Mac版Excelとの互換性を保ちたいかで選択が変わります。実務で使う頻度が高いのは、社内で完結する秒単位〜分単位の待機であればApplication.Wait、外部システムとのタイミング調整でミリ秒単位の精度が必要な場合はSleep関数、という住み分けです。

Mac版でも
動かしたい?

YESなら
Application.Wait
ミリ秒単位の
精度が必要?

YESなら
Sleep関数
宣言なしで
すぐ試したい?

YESなら
Application.Wait
結論
用途に応じて
使い分ける
⚠️ 両方ともUIをブロックする点は共通

SleepもApplication.Waitも、待機中はVBAの実行スレッドが止まるため、その間Excelの画面操作ができなくなる点は共通です。長時間(数十秒以上)の待機を挟む処理では、ユーザーから見て「Excelが固まった」ように見え、最悪の場合「応答なし」と表示されて強制終了の判断をされてしまうことがあります。数秒を超える待機を挟む場合は、待機理由をメッセージボックス等で先に伝えておくことを推奨します。

代表菅澤 代表菅澤
「どっちが正解か」より「自分の環境と用途にどちらが合っているか」で選ぶのが正しい考え方です。Mac版Excelを社内の一部が使っているなら、迷わずApplication.Wait一択ですね。

05 現場でハマりやすい5つの落とし穴 サポート現場でよく相談される実例ベースの注意点

ここでは、VBAのSleep/Wait関連で実際によく発生するトラブルを5つに整理します。

5-1. 【落とし穴1】待機中にExcelが「応答なし」と表示される

待機時間が長い(目安として数十秒以上)場合、Windowsが「このアプリケーションは応答していません」という趣旨の表示を出すことがあります。これは異常ではなく、待機中は正常な動作としてExcelの画面更新が止まっているために起きる表示です。ただし、これを見た利用者が慌てて強制終了してしまうケースが後を絶ちません。

📚 用語解説

DoEvents:VBAの実行中に、OS側に一時的に制御を戻して他の操作(画面描画・キー入力の受付など)を処理させるための命令。長い待機やループ処理の途中にDoEventsを挟むと、Excelが「応答なし」に見えにくくなる場合がありますが、Sleep関数やApplication.Wait自体の待機中はDoEventsを挟んでもタイマー自体は変わらず経過します。

5-2. 【落とし穴2】64bit環境への移行で急にエラーが出る

前章で触れた通り、PtrSafeキーワードの付け忘れは非常によくある事故です。特に「Windows 7・32bit Office時代に作られたマクロ資産を、新しいPC(64bit Office)に移した」というタイミングで表面化します。社内のPC入れ替え時期に「昨日まで動いていたマクロが動かない」という相談が集中するのは、大半がこのパターンです。

5-3. 【落とし穴3】TimeValueの秒数指定を誤って長時間待ってしまう

TimeValue("00:00:03")と書くべきところを、うっかりTimeValue("03:00:00")(3時間)と書き間違えるようなケースです。時:分:秒の順序を勘違いしたまま実装し、テスト環境では気づかず、本番運用で「なぜかマクロが全然終わらない」という事態になった、という相談も実際にありました。

⚠️ 秒数指定は必ずテスト環境で目視確認する

Application.Waitの時刻指定は、桁を間違えても文法エラーにはならず「意図しない長さで待つだけ」という形で問題が表面化しにくいのが厄介な点です。実装後は必ず一度、実際に待機時間をストップウォッチ等で計測し、意図通りの秒数になっているかを目視確認してください。

5-4. 【落とし穴4】Mac版Excelで動かず「kernel32が見つからない」エラー

Sleep関数はWindowsのkernel32.dllに依存しているため、Mac版のExcelでは動作しません。社内に一部Macユーザーがいる環境で、Windows専用の書き方をそのまま配布してしまい、Macユーザーだけエラーになる、という事故がしばしば起きます。Mac互換性が必要な場合は、Application.Waitを使うか、Mac用の宣言方法を別途用意する対応が必要です。

5-5. 【落とし穴5】待機中に強制終了され、保存前のデータが消える

待機中に「応答なし」と表示されたExcelをユーザーが強制終了してしまうと、その時点で保存していない作業内容は失われます。特に、待機処理を含むマクロの実行前に手動でこまめな保存を行っていないと、被害が大きくなりがちです。待機を含む自動化処理を組む際は、処理の節目でこまめに自動保存を挟む設計にしておくことを推奨します。

✔️待機を挟む処理の前後に、進行状況が分かるメッセージやステータスバー表示を入れる
✔️数十秒を超える待機を1回で入れず、短い待機とチェック処理を繰り返す設計に分割する
✔️64bit/32bit両対応のDeclare文をテンプレート化し、コピペミスを防ぐ
✔️Mac版利用者がいる場合は、事前にApplication.Wait方式で統一するか動作確認を取る
✔️待機を含むマクロを本番投入する前に、必ず秒数の目視確認を行う
AI鬼管理山崎 AI鬼管理山崎
この5つは、いずれも「知っていれば防げた」トラブルばかりです。逆に言えば、正しい書き方さえ押さえれば、Sleep/Waitはそこまで難しい機能ではありません。
代表菅澤 代表菅澤
一方で、こうした細かい仕様を都度調べながらVBAを書き続けるのは、非エンジニアの経営者や管理職にとって正直かなりの負担です。次の章では、弊社の実務データも交えながら、この負担そのものをどう解消するかをお話しします。

06 【独自データ】待機処理の属人化リスクと自動化の実態 Claude Codeを全社導入した会社が見えてきたこと

ここからは弊社(株式会社GENAI)の実務データをもとに、VBAのような「細かい調整が必要な自動化処理」と、AIを使った自動化の実態を比較していきます。

6-1. 弊社の導入状況

項目内容
契約プランClaude Max 20x(月$200 / 約30,000円)
利用開始2025年後半〜
利用部署経営・営業・広告・開発・経理・秘書業務まで全社

弊社では、VBAのSleep/Waitのような「処理速度のズレを微調整する」タイプの作業を含め、社内のマクロ・スクリプト・自動化処理をClaude Codeに任せる運用を進めています。ここで見えてきたのが、「待機時間の調整」自体が属人化しやすいという問題です。

6-2. 「待機時間の調整」が属人化する理由

VBAのSleep関数やApplication.Waitの秒数設定は、多くの場合、担当者が試行錯誤しながら「とりあえず3秒にしたら動いた」という形で決められています。この数値の根拠が引き継ぎ資料に残っていないケースが大半で、担当者が異動・退職すると「なぜこの秒数なのか誰も分からないが、変更すると壊れそうで触れない」というブラックボックス化が起きます。

⚠️ 数値の注意書き

本セクションの削減時間・工数の数値は、弊社の肌感ベースの概算であり、業種・業態・担当者のスキルによって変動します。「Claude Max 20xプランを全社で使い倒すとどの程度の自動化が進むか」の参考情報としてご覧ください。

弊社の実運用でも、営業(提案書・見積作成)は週20時間から週2時間へ、経理(請求書チェック・経費仕訳)は月40時間から月5時間へ、ブログ記事執筆は1本8時間から1本1時間へと、業務領域ごとに大幅な工数削減が進んだ肌感があります。VBAのような「一度作ったら誰も触れない自動化」ではなく、都度AIに自然な言葉で相談しながら微調整できる自動化に置き換えることで、担当者の異動や退職に左右されにくい業務体制を作れている実感です。

6-3. 「属人化した待機処理」を可視化するとどうなるか

弊社でお客様の業務自動化を支援する中で見えてきたのが、「なぜこの秒数を待っているのか」を説明できる担当者が、社内に1人もいないケースが珍しくないという事実です。VBAのSleep/Wait設定は、一見地味な部分ですが、実は属人化リスクの温床になりやすい箇所です。

代表菅澤 代表菅澤
お客様先で「このマクロのSleep(5000)の5000って何の意味があるんですか」と聞いても、誰も答えられないという場面に何度も遭遇しています。属人化は派手な業務より、こういう地味な数値設定にこそ潜んでいます。
AI鬼管理山崎 AI鬼管理山崎
弊社では、こうした「誰も説明できない設定値」を見つけたら、まずAIに現状のコードを読ませて「この待機時間の意味と、変更した場合の影響」を言語化してもらうところから着手しています。属人化の第一歩は、可視化なんです。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 【独自】非エンジニアが「VBA沼」から抜け出すルート Sleep/Waitの微調整をAIに任せるという選択肢

ここまで解説してきた通り、Sleep関数の宣言方法やApplication.Waitの時刻計算は、正確に理解すれば決して複雑な仕組みではありません。しかし、非エンジニアの経営者や管理職が、日々の業務の合間にこの仕様を正確に把握し続けるのは、現実的にはかなりの負担です。

「処理間隔を2秒から5秒に変えたい」「このマクロ、たまにエラーになるから待機時間を調整したい」——こうした細かい調整のたびに、PtrSafeの意味やTimeValueの書式を思い出しながらコードを書き直すのは、本業に集中したい経営者・管理職にとって本質的な仕事ではないはずです。

7-1. 「VBAを書く」から「AIに話しかける」への転換

近年広がっているのが、Claude CodeのようなAIエージェントに、VBAコードの調整そのものを任せてしまうという方法です。ターミナルという言葉を聞くと身構えてしまう方も多いと思いますが、2026年時点のClaude Codeにはデスクトップ版のチャットUIも用意されており、「このExcelマクロの処理間隔を3秒から5秒に伸ばして」と日本語で話しかけるだけで、Sleep関数やApplication.Waitの該当箇所を正確に書き換えてくれます

💡 非エンジニアがまず試すべき一言

お手元のマクロファイルを開いた状態で、Claude Codeに「このマクロのSleep関数やApplication.Waitの部分を教えて、何秒待っているか説明して」と話しかけてみてください。属人化していた待機時間の意味が、その場で言語化されます。次に「64bitのOfficeでも動くように直して」と伝えれば、PtrSafeの付け忘れのようなミスも自動で修正されます。

もちろん、AIが生成・修正したコードをノーチェックでそのまま本番運用に投入するのは避けるべきです。ただし、「PtrSafeの意味を理解する」「TimeValueの秒数計算を暗算する」といった専門知識の部分をAIに肩代わりしてもらい、人間は「何秒に変えたいか」「どのタイミングで待機させたいか」という業務判断に集中するという役割分担であれば、非エンジニアでも十分に運用できます。

Step 1
既存マクロを
AIに読ませる
Step 2
待機処理の
意味を言語化
してもらう
Step 3
日本語で
調整を依頼
(秒数・条件)
Step 4
テスト環境で
動作確認して
本番反映

7-2. VBAの知識ゼロから始める場合の考え方

「そもそもVBAの知識がゼロで、既存のマクロも社内の誰かが作ったものでよく分からない」という状態でも、まずは現状のマクロファイルをAIに読ませて内容を要約してもらうところから始められます。属人化した既存資産の棚卸しを、AIとの対話で進めるというアプローチです。

✔️既存マクロの中身をAIに要約してもらい、「何をしている処理か」を可視化する
✔️待機処理(Sleep/Wait)の秒数の意味と、変更した場合の影響をAIに確認する
✔️調整したい内容(秒数・待機タイミング)を日本語の指示としてAIに伝える
✔️生成されたコードはテスト環境で必ず動作確認してから本番に反映する
⚠️ AIに任せる場合も「丸投げ」は禁物

AIは非常に高い精度でVBAコードを理解・修正できますが、本番の業務データを扱うマクロである以上、最終的な動作確認は人間が行うべきです。特に、外部システムとの連携やファイルの上書き処理を含むマクロは、テスト環境での検証を必ず挟んでから本番反映してください。

代表菅澤 代表菅澤
弊社の支援先でも「VBAは分からないけど、AIに聞きながら少しずつ手直しできるようになった」という経営者の方が増えています。専門知識を覚えることより、AIとの正しい付き合い方を覚える方が、投資対効果は圧倒的に高いです。
AI鬼管理山崎 AI鬼管理山崎
Sleep関数の宣言方法やTimeValueの書式は、覚えても直接の売上にはつながりません。そこはAIに任せて、経営者は「業務のどこにボトルネックがあるか」を見つけることに時間を使うべきだと考えています。

08 目的別・状況別の早見表 自分の状況に近い行を探して判断する

ここまでの内容を1枚にまとめました。自分の状況に近い行を確認してください。

あなたの状況おすすめの方法理由
ミリ秒単位の精度が必要Sleep関数(API宣言)TimeValueより細かい単位を扱える
Mac版Excelとの互換性が必要Application.Waitkernel32依存がなくクロスプラットフォーム
宣言なしですぐ試したいApplication.WaitDeclare文の準備が不要
64bit環境への移行で急にエラーが出た#If VBA7分岐 + PtrSafe追加本記事2章の宣言文をそのまま適用
VBAの知識に自信がない・時間がないAI(Claude Code)に調整を依頼専門知識の部分をAIに任せ、業務判断に集中

09 まとめ ── 「処理を止める」で消耗しない働き方へ 正しい書き方を押さえた上で、細かい調整はAIに任せる

この記事では、VBAのSleep関数(Windows API宣言)とApplication.Waitメソッドの正しい書き方、両者の使い分け、現場で起きやすい落とし穴、そして非エンジニアがこうした調整とどう付き合うべきかまでを整理しました。最後にポイントを振り返ります。

✔️Sleep関数は「#If VBA7 Then〜PtrSafe〜#Else〜#End If」で32bit/64bit両対応の宣言にする
✔️Sleepの引数dwMillisecondsはLong型のままでよく、LongPtrへの変更は不要
✔️Application.Waitは「期間」ではなく「再開する時刻」を渡す仕組みだと理解する
✔️TimeValueは1秒未満の指定に弱いため、細かい精度が必要ならSleep関数を使う
✔️Sleep関数はWindows専用(kernel32依存)、Mac版ではApplication.Waitを使う
✔️待機時間の根拠が引き継がれず属人化するケースが多く、可視化が重要
✔️VBAの知識がなくても、AIに日本語で相談しながら待機処理を調整する選択肢がある

最も重要なメッセージをお伝えします。Sleep関数やApplication.Waitの正確な書き方を知っておくことは大切ですが、それを完璧に覚えることが目的ではありません。大切なのは、業務のどこに「処理速度のズレ」という課題があるかを見抜くことであり、その先の実装作業は、正確な知識を持ったAIに任せるという選択肢が十分に現実的になっているということです。

弊社では、こうした「VBAの属人化した自動化資産」を棚卸しし、AIと対話しながら安全に引き継ぐ・調整する仕組みづくりを支援しています。この考え方に共感いただけた方は、ぜひ以下からお気軽にご相談ください。

代表菅澤 代表菅澤
弊社では「AI鬼管理」というサービスで、VBAのような既存の自動化資産を含めた業務設計から、Claude Codeを使った運用の伴走まで支援しています。属人化した処理を可視化するところから、無料相談で具体的にお答えします。

VBAの属人化した待機処理も、AI鬼管理が一緒に棚卸しします

「Sleep(5000)の5000の意味が誰も分からない」——そんな属人化した自動化資産を、Claude Codeとの対話で可視化・引き継ぎできる状態に変えていきます。
あなたの会社のVBA資産、AIに読ませてみませんか。

AI鬼管理山崎 AI鬼管理山崎
「社内に眠っているマクロが動いているのか壊れているのかも分からない」という方に特に向いています。まずは無料相談で、今あるマクロ資産の状態を一緒に確認しましょう。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

よくある質問

Q. SleepとApplication.Wait、結局どちらを使えばいいですか?

A. 基本的にはApplication.Waitから検討するのがおすすめです。宣言文(Declare)が不要でコードがシンプルになり、Mac版Excelでも動作します。一方、ミリ秒単位の細かい精度が必要な処理や、外部システムとのタイミング調整をよりシビアに行いたい場合はSleep関数を使ってください。用途に応じた使い分けが基本方針です。

Q. 64bit版のOfficeでマクロがエラーになるのはなぜですか?

A. 多くの場合、Sleep関数などのAPI宣言に「PtrSafe」キーワードが付いていないことが原因です。Office 2010以降(VBA7対応環境)でAPIを宣言する場合、PtrSafeの記載が必須になりました。本記事で紹介した「#If VBA7 Then〜PtrSafe〜#Else〜#End If」という条件分岐を使えば、32bit・64bitどちらの環境でもエラーなく動作します。

Q. Application.Waitでミリ秒単位の指定はできますか?

A. TimeValue関数を使った文字列指定(例:"00:00:03")では1秒未満の精度は不安定になりやすいため、実務上は1秒単位で丸めて使うのが安全です。ミリ秒単位の精度がどうしても必要な場合は、Application.WaitではなくSleep関数(Windows API宣言)を使う方が確実です。

Q. SleepやWaitを使うとExcelが「応答なし」と表示されるのですが、異常ですか?

A. 異常ではありません。SleepもApplication.Waitも、待機中はVBAの実行スレッドが停止するため、Excel全体の画面操作ができなくなります。待機時間が数十秒以上に及ぶと、Windows側が「応答なし」という表示を出すことがあります。慌てて強制終了せず、待機処理が完了するまで待つことが基本です。ただし待機理由が分かるようメッセージを表示しておくと利用者の混乱を防げます。

Q. Mac版Excelでも同じコードは動きますか?

A. Sleep関数はWindowsのkernel32.dllに依存しているため、Mac版Excelでは動作しません。社内にMacユーザーがいる場合や、両OS環境で同じマクロを使い回したい場合は、Application.Waitメソッドを使う方式に統一することを推奨します。Application.WaitはExcelの標準機能であるため、WindowsでもMacでも同様に動作します。

Q. マクロがフリーズして強制終了した場合、それまでの作業データは消えますか?

A. 保存していない変更内容は失われる可能性が高いです。待機処理を含むマクロを実行する前に、ファイルを保存しておくか、処理の節目でこまめに自動保存する設計にしておくことを強く推奨します。特に長時間の待機を挟む処理では、利用者が「フリーズした」と誤解して強制終了してしまうリスクを念頭に置いた設計が必要です。

Q. VBAを書かずに、同じような処理待ちの調整をする方法はありますか?

A. あります。Claude CodeのようなAIエージェントに、既存のマクロファイルを読ませた上で「処理間隔を〇秒に変えて」「64bitでも動くように直して」と日本語で依頼する方法です。PtrSafeの意味やTimeValueの書式といった専門知識をAIに肩代わりしてもらいながら、人間は「何秒に変えたいか」という業務判断に集中できます。ただし生成されたコードは必ずテスト環境で動作確認してから本番反映してください。

Q. Sleep関数の宣言で、なぜ変数型はLongのままでよいのですか?

A. 64bit対応というと変数型もすべてLongPtrに変える必要があると誤解されがちですが、LongPtrへの変更が必要なのは、メモリアドレスやウィンドウハンドルのようにポインタサイズが環境によって変わる値を扱う引数の場合に限られます。Sleep関数の引数dwMillisecondsは単なる待機ミリ秒数であり、ポインタではないためLong型のままで問題ありません。変更が必要なのは宣言先頭のPtrSafeキーワードのみです。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
※法人・事業用のメールアドレスでお願いします(Gmail等の個人用フリーメールは受付できません)
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年8月3日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。