『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】Application.OnTimeで指定時刻にマクロを実行

【VBA】Application.OnTime

VBA の Application.OnTime メソッドを使うと 指定した時刻にマクロを実行させることができます。こばとの作ったマクロで OnTime メソッドを試してみましょう。

'[VBA] Application.OnTimeのサンプルコード

'メッセージを表示するサブルーチン
Sub Message()
  Dim mymsg As String
  mymsg = "あとりえこばとをよろしく"
  MsgBox (mymsg)
End Sub

'13:30にMessageを起動するサブルーチン
Sub Ontime_Test1()
  Application.OnTime TimeValue("13:30:00"), "Message"
End Sub

予め Message というマクロを作ってあります。Message は「あとりえこばとをよろしく!」というメッセージを表示させるマクロです。Ontime_Test1() のほうの中身は1行だけです:

Application.OnTime TimeValue("13:30:00"), "Message"

OnTime メソッドの引数には時刻と動かすマクロを指定しています。つまり、13 時 30 分きっかりに Message マクロが起動して「あとりえこばとをよろしく!」というメッセージが表示されることになります。皆さんは今から数分後ぐらいの時刻を指定して、実際に表示されるかどうか確認してみてください。あるいは

Application.OnTime Now + TimeValue("00:00:5"), "Message"

というように書き換えると、現在の(マクロを実行したときの)時刻から数えて 5 秒後に「あとりえこばとをよろしく!」が表示されることになります。
 
ちなみに、ここで使用している Now は現在の日付を取得する関数、TimeValue は特定時刻を指定する関数です。
 
スケジュールが有効なのは、上のマクロが記述されているブックが開いているときだけです。閉じてるときには何も起こりません。ていうかさ、そうでなかったら怖いじゃん? Excel とか全然使ってないときに、いきなり画面に
「あとりえこばとをよろしく!」
なんてメッセージが現れたら、コンピュータウィルスにでもやられたのかと思うじゃん?
 
ま、そんな話はさておいて、Application.OnTime の書式も載せておきます。

OnTime(EarliestTime, Procedure, LatestTime, Schedule)

英語で書いてあると分かりにくいかもしれないので、引数を日本語に直しておきます(直訳でなく、意味がわかりやすいようにしてあります)。

OnTime(実行時刻, 実行マクロ, 待ち時間, スケジュール)

最初の 2 つの引数は上で説明した通りです。
 
[待ち時間] は、指定した時刻に他のマクロが起動していたときに「これだけの時間は待ちますよ」というものです。
 
[スケジュール] は、省略するか True にしておくと、設定した起動スケジュールが有効になるというものです。False なら無効になります。無効にするなら、最初からこんなメソッド使わなきゃいいわけで、普通はあまり使う機会もないと思うけど、この引数を変数にしておいて、条件によってスケジュールの有効/無効を切り替えるような複雑なマクロ(ゲームとか?)を作る時に使うのかもしれません。あ、そうだ。もし VBA でゲーム作ってる強者がいたら教えてくださいな。そんで、そのファイル送って。こばとが遊ぶから。
 
➡【VBA】日付型変数と日付シリアル値

一定間隔で処理を自動実行するマクロ

Application.OnTime メソッドを使用すると、一定の間隔で処理を自動的に実行できます。例えば、次のコードは 1 分ごとに MyMacro というサブルーチンを実行します。

Sub ScheduleMacro()
    Application.OnTime Now + TimeValue("00:01:00"), "MyMacro"
End Sub

Sub MyMacro()
    ' ここに処理を記述する
    MsgBox "Hello, World!"
    ' 次回の実行をスケジュールする
    ScheduleMacro
End Sub

上記のコードでは、ScheduleMacro が最初に実行されます。その後、Application.OnTime メソッドを使用して、現在の時間(Now)から 1 分後に MyMacro が実行されるようにスケジュールします。MyMacro 内で処理が完了すると、再び ScheduleMacro が呼び出され、次回の実行がスケジュールされます。これにより、指定した間隔で処理が自動的に繰り返されます。

Application.OnTimeの色々な応用例

AI (ChatGPT) に VBA の Application.OnTime メソッドの応用例を尋ねると、以下のような例を示してくれました。
 
プレゼンテーションの自動制御:PowerPointを使用してプレゼンテーションを行う場合、Application.OnTimeメソッドを使用してスライドの自動遷移やアニメーションの制御を行うことができます。例えば、特定の時間ごとに次のスライドに遷移させたり、特定のスライドでアニメーションを開始したりすることができます。

データの自動更新:Excelを使用してリアルタイムなデータの監視や分析を行う場合、Application.OnTimeメソッドを使用して一定の間隔でデータの自動更新を行うことができます。たとえば、特定のデータソースからデータを取得し、それを処理して結果を表示するマクロを作成し、定期的にデータを更新するようにスケジュールできます。

バックアップの自動化:ファイルのバックアップは重要ですが、手動でバックアップを作成するのは面倒かもしれません。Application.OnTimeメソッドを使用して、一定の時間ごとにファイルのバックアップを自動的に作成することができます。たとえば、特定のフォルダ内のファイルを定期的に別の場所にコピーするなどの処理を自動化できます。
 
メッセージの自動送信:Outlookを使用して定型のメールや予定のリマインダーを送信する場合、Application.OnTimeメソッドを使用して指定した日時に自動的にメッセージを送信することができます。たとえば、特定の日時にメールを送信して誕生日のお祝いメッセージを送ったり、ミーティングのリマインダーを送信するなどの処理を自動化できます。

コメント