ExcelVBA~OnTimeを使ってみよう~
- ムギ
- 5月8日
- 読了時間: 4分

はじめに
こんにちは。ティーマネジメントのシステム担当ムギです。
最近、社内でExcel VBAを使う機会が多くなってきています。
そこで、今回はExcelVBAでOnTimeメソッドを使った内容をご紹介したいと思います。
OnTimeメソッドとは?
ExcelVBAのOnTimeメソッドは、指定した時刻にプロシージャ(マクロ)を
実行させることができるメソッドです。
時刻の指定は、特定の日時や特定の時間経過後などを指定することができます。
<基本構文>
Application.OnTime (EarliestTime,Procedure,LatestTime,Schedule)
・EarliestTime:プロシージャを実行する時刻
・Procedure:実行するプロシージャ名(文字列で指定)
・LatestTime:プロシージャの実行が可能になる最も遅い時刻(省略可能)
(実行予定のプロシージャが実行できない場合、いつまで待機するか)
・Schedule:True→新しいOnTimeプロシージャを設定する(規定値)
False→以前に設定したプロシージャを解除する
なお、OnTimeメソッドは実行待ち中にExcelが閉じられると、
予定されていたプロシージャは実行されませんのでご注意ください。
また、別のプロシージャが実行されていた場合や、セルへの入力中などは、
その作業が終了するまで予定されていたプロシージャの実行は待機されます。
(この待機時間の最大値を決めるのがLatestTime、指定されていない場合は作業終了まで待つ)
OnTimeメソッドを使ってみよう
では、実際にOnTimeメソッドを使ってみましょう。
今回は、会議の議事録をExcelに記録するとして、会議終了予定時刻にメッセージダイアログを出すという
処理を例にします。
※完成イメージ

では早速内容を確認していきましょう。
大きくわけて、3つの対応が必要です。

①モジュールレベル変数を設定
同じモジュール内で共通使用できる変数を宣言します。
※別のモジュールを使用する場合、パブリック変数で宣言しても問題ございません。
モジュールレベル変数は宣言セクションと呼ばれるエリアに記述します。
※宣言セクション: SubやFunctionなど、プロシージャの定義よりも前に配置される部分
以下の形式で変数を宣言します。
この変数には時刻が入る想定なので、変数の型はDate(日付型)を指定します。
※変数名は任意に設定で問題ございません。
Dim 変数名 As Date

②指定時間に実行するプロシージャ
指定時間になったときに実行するプロシージャです。
今回の例では、会議終了時にメッセージダイアログを出すようにしたいため、MsgBox関数を使用します。
表示するメッセージの内容やその他のオプションはご自由に設定してみてください。

③OnTimeメソッドで実行したい処理を予約するプロシージャ
今回の例では、会議開始時に実行するものになります。
Subプロシージャで作成していきます。
処理が開始されたことが分かりやすいように、
開始時に「会議を開始します。」とメッセージを出す処理も追加していますが、
こちらの部分はなくても問題ございません。
必要なコードとしては、以下の2つです。
<1>実行させたい時間を①で宣言した変数に格納する
<2>OnTimeメソッドで実行する処理を予約する
<1>実行させたい時間を①で宣言した変数に格納する
①で宣言した「実行時間」変数に、終了時刻が入力されているセルを指定しています。
こちらはセルの値でなく、TimeValueで直接時間を指定することもできます。
<2>OnTimeメソッドで実行する処理を予約する
ここでOnTimeメソッドの出番です。
新しくSubプロシージャを作成し、以下のような構文でコードを記述します。
Application.OnTime 実行させる時間, "実行するプロシージャ名"
今回の例に当てはめると、以下のようになります。
Application.OnTime 実行時間, "メッセージ表示"
※実行時間:①で宣言した「実行時間」変数
※メッセージ表示:②で作成した実行するプロシージャ名
この時、プロシージャ名は文字列で指定する必要があるため、
プロシージャ名を変数で指定したい場合は文字列型で指定してください。

これで完成です!
あとはボタンや任意のオブジェクトにマクロを登録し、
会議開始時に実行するようにすれば、終了時刻に通知できるようになります。
通知が来るまでの間はセルに文字を入力するなど、Excelの編集が可能です。
ただし、セルにカーソルが入ったままになっていると指定時間になっても
処理が実行できないためご注意ください。
※確定してセルから抜けたときにメッセージが表示されます。

おまけ
今回の例では指定時刻になったらメッセージを表示する、という設定にしましたが
会議終了時刻の5分前や、開始時間の○分後にダイアログを出すこともできます。
【会議終了時刻5分前にメッセージを表示】
※終了時刻がH3セルに入力されているものとする

【開始時刻の1時間後にメッセージを表示】

おわりに
いかがでしたでしょうか。
今回はExcelVBAのOnTimeメソッドを使って
指定時間にマクロを実行させる方法についてご紹介いたしました。
動作させたいExcelを開いている必要があるなど制限事項もありますが、
こんなのに使えるかも!と思える作業などがあればぜひご活用ください。