最速怪談選手権

閲覧ありがとうございます。
マクロ初心者で申し訳ないのですが、Excel VBAで『実行ボタン』を押下したらまずその時間に『マクロ実行』を実行させ、2回目以降はキリのいい15分刻みで自動的に『マクロ実行』を動かしたいです。

1回目:10:10に一度『マクロ実行』
2回目:10:15に『マクロ実行』
3回目:10:30に『マクロ実行』
4回目:10:45に『マクロ実行』




サイトを参考に下のように作成しましたがらどうやってもうまくいかず、また2回目以降は15分ごとと10分ごととファイルによって可変できるように作りたいのです。(7分ごととかのファイルがありました。)


お手数おかけして申し訳ありませんが、よろしくお願いいたします。

Dim 実行時間 As Date

Sub 指定時刻実行()

'##### 処理実行 ###############################
'15分毎に実行
実行時間 = Now + TimeValue("00:15:00")
Application.OnTime Earliesttime:=実行時間, Procedure:="指定時刻実行"

マクロ実行
End Sub

Private Sub マクロ実行()
MsgBox "マクロを実行しました。"

End Sub

Sub マクロ中止()

Application.OnTime Earliesttime:=実行時間, Procedure:="指定時刻実行", Schedule:=False
MsgBox "マクロを中止します。"

End Sub

質問者からの補足コメント

  • 早々にご回答いただきありがとうございます。

    実行時間 = Now + TimeValue("00:15:00")
    の部分を
    実行時間 = WorksheetFunction.Ceiling(Now(), TimeValue("00:15:00"))
    に書き換えてみましたところ、

    押下直後
    15:26:42 に実行

    自動1回目
    15:30:00 に実行
    15:30:42 に実行

    自動2回目
    15:35:00 に実行
    15:35:42 に実行




    と、自動化した部分で毎回2回処理が実行されてしまいました…。
    知識不足で申し訳ありませんがご教示頂けると嬉しいです。
    よろしくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/01/30 16:01

A 回答 (2件)

No1です。



どういう状況か不明ですけれど、なんだかどこかでもう一つ別のマクロ(元で提示のようなもの)が実行されているような・・・?


こちらで以下のごく簡単な仕組みを作成して、テストしてみました。

Sub Time_Sample()
m15 = TimeValue("00:15:00")
s01 = TimeValue("00:00:01")

'イミディエイトウインドウに実行時刻を出力
Debug.Print "実行 [" & Now() & "]" & vbNewLine

'15分毎に繰り返す
nextTime = WorksheetFunction.Ceiling(Now() + s01, m15)
Application.OnTime nextTime, "Time_Sample"
End Sub

※ 実行時の時刻をイミディエイトウィンドウに出力しています。
※ 処理が軽いため同じ時間内に何度も実行されてしまう可能性があるので、1秒分のウェイトを加算しています。(=変数s01)


--- 1度目のテスト結果
実行 [2020/01/30 16:35:09]
実行 [2020/01/30 16:45:00]
実行 [2020/01/30 17:00:00]

15分間隔はそれなりにかったるいので、2度目は
 m15 = TimeValue("00:05:00")
として、5分単位にしてテストしました。

--- 2度目のテスト結果
実行 [2020/01/30 17:01:50]
実行 [2020/01/30 17:05:00]
実行 [2020/01/30 17:10:00]
実行 [2020/01/30 17:15:00]

一応、予定通りの結果が得られているみたいですが…
    • good
    • 0
この回答へのお礼

お礼が遅くなりまして申し訳ございません。
こちらで回答頂いた内容で再度作ってみたところ思った通りの動きをしてくれました!!
ありがとうございます!!原因はいまいちわからないのですが、loopを途中で入れていたのでもしかしたらそこが原因なのかと思い最初から組み直してみたところ動きました。
ありがとうございました。

お礼日時:2020/02/02 17:56

こんにちは



>『2回目以降はキリのいい15分刻みで自動的に『マクロ実行』を動かしたいです。
現在のご提示の方式でそのまま実現可能と思います。
OnTimeで指定する時刻を、ご希望のように変えれば良いだけでしょう。

現状は、次の実行時刻を単純に15分後として
>実行時間 = Now + TimeValue("00:15:00")
のように算出していますが、これを15分刻みにするなら
nextTime = = WorksheetFunction.Ceiling(Now(), TimeValue("00:15:00"))
などで、次の時刻を計算してあげれば良いのではないでしょうか。。

ただし、「次の時刻」が1分後でも、10秒後であってもその時刻が指定されてしまいますので、「最低5分後より後の15分刻み」などにしたければ、現在時刻に5分を加えておけばよろしいでしょう。


>また2回目以降は15分ごとと10分ごととファイルによって
>可変できるように作りたいのです
条件が何になるのかよくわかりませんが、基準となる時間を変数にしておいて、条件によってその値を変えられるようにしておけば、対応できるものと思います。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!