EXCEL VBA 指定した時刻に実行・指定した時刻まで止める(Waitメソッドの使い方)
EXCEL VBA 指定した時刻に実行・指定した時刻まで止める(Waitメソッドの使い方)
EXCEL VBAでプログラムを作成した時に、ある一定の時間を停止したり、指定時刻に実行させたい時があると思います。その時に利用するのが、ApplicationオブジェクトのWaitメゾットです。このメゾットを利用する事で、タイムスケジュールなどを管理するプログラムを作成する事も出来ます。それでは、Waitメゾットの利用方法を説明いたします。
【ApplicationオブジェクトのWaitメゾットの利用方法】
Application.Wait(Time)
使用例: Application.Wait Now() + TimeValue(“00:00:05”)
※現在の時刻から+5秒後まで停止します。(5秒後に実行します)
使用例: Application.Wait “12:00:00”
※指定した時間(12時)まで停止します。(12時に実行します)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub 指定時刻() Application.Wait "12:00:00" MsgBox "時間になりました。" End Sub Sub 現在時刻時刻から10秒後() Application.Wait Now + TimeValue("00:00:10") '現在時刻から10秒待つ MsgBox "時間になりました。" End Sub |
文字列を順番に表示します(1秒ごと:Application.Wait)
下記のサンプルプログラムは、指定した文字列(セルA1)に対して、1文字ずつ順番に表示(セルA3)させるプログラムです。文字を1文字ずつ表示させる待ち時間は、1秒に指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub 文字列順番表示() Dim Moji As String Dim I, L As Integer Moji = Cells(1, "A") 'セル「A1」の文字をMojiへ代入 L = Len(Moji) '代入されたMojiの文字数をLへ For I = 1 To L '文字数分繰り返す。 Application.Wait Now + TimeValue("00:00:01") '現在時刻から一秒待つ Cells(3, "A") = Cells(3, "A") & Mid(Moji, I, 1) 'セルA3に一文字ずつ順番に表示させる。(文字を加える) Next I End Sub |
※(画面クリックして拡大)
実行時間を指定してタイムスケジュール管理(指定時刻:Application.Wait)
下記のプログラムは、実行時間を指定してスケジュール管理を行うプログラムです。下表の通りに、実行する項目と作業時間を設定します。指定時間になると、スケジュール項目のメッセージボックスが表示され項目に対して完了したか?(Yes/No)で選択判定します。判定結果をD列の「作業完了」に「Yes:処理済み」・「No:未処理」と選択結果に応じて登録されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub タイムスケジュール管理() Dim Hantei As Integer ' Dim Moji As String Dim I, L, lRow As Long lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行取得 MsgBox "スケジュール管理スタート" For I = 2 To lRow Application.Wait Cells(I, "C") '現在時刻+次の作業までの時間 Hantei = MsgBox(Cells(I, "B") & "完了したか?(Yes/No)", vbYesNo) If Hantei = vbYes Then Cells(I, "D") = "処理済み" 'Yesボタンを押した場合(D列に処理済み) Else Cells(I, "D") = "未処理" 'Noボタンを押した場合(D列に未処理) End If Next I End Sub |
●実行前~実行後 ※プログラム実行後、作業時間に達成した項目(スケジュール)のメッセージが表示され、項目内容に対して完了したか?(Yes/No)で選択判定します。選択した結果に応じて「作業完了」に反映します。
※(クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。