指定した時刻にマクロを起動する


最近Mac版のExcel 2008を触っているのですが、Windows版にはない機能などがあって、なかなか楽しいです。何より、今まで食わず嫌いしていたMacintoshがおもしろいです。基本的な操作で悩むことも多いのですが、それがまた、パソコンを始めた頃のような新鮮さです。

Mac版Excel 2008には「タイマー機能」があります。指定した時間がくるとメッセージが表示される機能です。Excel 2008だけで実現しているわけではありませんが、なかなか楽しい機能です。そういえば、Windows版のExcelでも、指定した時刻にマクロを起動する機能がありましたっけ。ちなみに、Excel 2008にはVBAが搭載されていません。、

指定した時刻にマクロを起動するには、ApplicationオブジェクトのOnTimeメソッドを使います。

OnTimeメソッドの書式は次の通りです。

OnTime(EarliestTime, Procedure, LatestTime, Schedule)
  • 引数EarliestTimeには、マクロを実行する時刻を指定します
  • 引数Procedureには、指定した時刻に実行するプロシージャ名を指定します
  • 引数LatestTimeは省略可能です。もし指定した時刻にほかのマクロが起動していると、OnTimeメソッドで設定したマクロが実行できません。そんなとき、引数LatestTimeで指定した時間だけ待ちます
  • 引数Scheduleは省略可能です。OnTimeメソッドの設定を有効/無効にします
  • 引数Scheduleを省略するかTrueを指定すると、スケジュールが有効になります
  • 引数ScheduleにFalseを指定すると、スケジュールを取り消します

まず、時刻になったら実行するマクロを作ります。

Sub AlarmMessage()
    MsgBox "時間です!", vbInformation
End Sub

そして、次のマクロを実行します。

Sub SetAlarm()
    Application.OnTime TimeValue("16:00:00"), "AlarmMessage"
End Sub

これで、あとは普通にExcelを使っていればいいです。指定した時刻(ここでは16:00:00)がくると、指定したマクロ(ここではAlarmMessage)が起動します。OnTimeメソッドで設定したスケジュールが有効になるのは、OnTimeメソッドを実行したブックがExcel上で開かれている間です。もちろん、Excelを再起動すると、スケジュールは無効になります。

上記のスケジュールを解除するには、次のようにします。

Sub SetAlarm()
    Application.OnTime TimeValue("15:45:00"), "AlarmMessage", , False
End Sub

マクロを起動する時刻は、「9:00」とか「18:00」のように特定の時刻を指定する場合は上記のようにTimeValue関数を使うと便利です。また、「現在の時刻から5分後」などの指定は、次のようにするといいでしょう。

Sub SetAlarm()
    Application.OnTime Now + TimeValue("00:05:00"), "AlarmMessage"
End Sub