【VBAリファレンス|実務向け】指定時刻にマクロを自動実行するOnTimeメソッドの実践的な活用術

スポンサーリンク

こんにちは。VBA講師の〇〇です。今回は、業務効率化の「隠し玉」とも言えるOnTimeメソッドについて深掘りします。

多くの解説記事では「定時にメッセージを出す」といった単純な例が紹介されますが、実務の現場では「もっと泥臭く、かつ堅牢な設計」が求められます。今回は、ただ実行するだけでなく、現場でトラブルを起こさないためのテクニックを解説します。

OnTimeの基本構造と「二重起動」の罠

OnTimeメソッドは、指定した時刻にプロシージャを呼び出す機能ですが、最も多い失敗が「ボタンを連打して同じ処理が複数回予約されてしまう」ことです。これを防ぐには、「現在の予約を一度キャンセルしてから再予約する」という手順が鉄則です。

以下のコードを見てください。

Sub 予約処理()
‘ 前回の予約をキャンセルしてから再予約する
On Error Resume Next
Application.OnTime EarliestTime:=TimeValue(“17:00:00″), _
Procedure:=”メイン処理”, Schedule:=False
On Error GoTo 0

‘ 17時に予約を入れる
Application.OnTime EarliestTime:=TimeValue(“17:00:00″), _
Procedure:=”メイン処理”, Schedule:=True
End Sub

このようにSchedule:=Falseを一度実行することで、誤操作による多重予約を確実に回避できます。

実務で使える「定期実行」の応用テクニック

単発の予約よりも、実務では「10分おきに最新データをサーバーから取得する」といった周期的な実行が求められるシーンが多いはずです。その場合は、プロシージャの最後に自分自身を再予約する「再帰的呼び出し」を使います。

Sub 定期データ取得()
‘ 実際のデータ更新処理
Call 最新データ取得ロジック

‘ 次の予約(10分後)を入れる
Application.OnTime EarliestTime:=Now + TimeValue(“00:10:00″), _
Procedure:=”定期データ取得”
End Sub

注意点:PCを閉じたらどうなる?

ここで一つ重要な注意点があります。OnTimeメソッドは、「Excelが開いていること」が前提です。PCをシャットダウンしたり、Excelを閉じてしまったりすると予約は消滅します。

もし「PCを閉じていても動かしたい」のであれば、VBAではなくWindowsの「タスクスケジューラ」を利用するのが正解です。VBAでのOnTimeは、あくまで「業務時間中にバックグラウンドで動かしておきたい処理」に限定して活用するようにしましょう。

まとめ:保守性を高めるために

OnTimeを使う際、プロシージャ名は「標準モジュール」に記述することをお勧めします。シートモジュールやThisWorkbookに書くと、外部から呼び出せない場合があるからです。

「予約の解除」と「再帰によるループ」。この2つをマスターするだけで、あなたのExcelは「単なる計算ツール」から「自律的に働く業務アシスタント」へと進化します。ぜひ、明日の定型業務から取り入れてみてください。

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