「Application.OnTime」で時間をコントロールする
Excel VBAには、指定した時刻にプログラム(プロシージャ)を実行するApplication.OnTimeという非常に便利なメソッドがあります。
これを使えば、例えば「10分おきにファイルを保存する」あるいは「毎朝9時に昨日の集計を行う」といった設定も簡単に実現できます。
【コピペでOK】一定時間おきに実行するコード
以下のコードをVBAのエディタ(Alt + F11)に貼り付けてみてください。今回は「5分おきにメッセージを出す」というシンプルな例です。
Dim NextTime As Date ' 次の実行時刻を保持する変数
' 自動実行を開始するボタン用
Sub StartTimer()
' 現在時刻の5分後に設定(時, 分, 秒)
NextTime = Now + TimeSerial(0, 5, 0)
' 指定した時刻に「MyProcess」を実行するよう予約
Application.OnTime NextTime, "MyProcess"
MsgBox "5分おきの自動実行を開始しました。"
End Sub
' 実際に動かしたい処理
Sub MyProcess()
' ここに実行したい内容を書く(例:セルに現在時刻を入力)
Cells(1, 1).Value = "最終更新: " & Now
' 【重要】自分自身を再度予約することで「繰り返し」にする
NextTime = Now + TimeSerial(0, 5, 0)
Application.OnTime NextTime, "MyProcess"
End Sub
' 自動実行を止めたいとき用
Sub StopTimer()
On Error Resume Next
' 予約していた時刻の実行を取り消す
Application.OnTime NextTime, "MyProcess", , False
MsgBox "自動実行を停止しました。"
End Sub
まずはTimeSerial(0, 0, 5)にして、5秒ごとの自動実行で試していただくと実際の挙動を手早く確認できると思います。
使う時の注意点
- Excelを開いておく必要がある: PCがスリープ状態だったり、Excelを閉じていたりすると動きません。
- 処理の止め忘れに注意: 終了するときは、必ずStopTimerを実行するか、ファイルを閉じる設定(Workbook_BeforeClose)に組み込むのがおすすめです。
「自分が操作していなくても、PCが勝手に作業を進めてくれる」というのは、VBAを学ぶ大きな醍醐味の1つとなります。まずはこのコードをコピーして、Excelが勝手に動く快適さをぜひ体感してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント