エクセル時間ごとにマクロを実行する方法

このQ&Aのポイント
  • エクセルで時間ごとにマクロを実行する方法について説明します。
  • 指定した時間ごとにマクロを実行させる方法を紹介します。
  • 具体的な実装方法や注意点についても解説します。
回答を見る
  • ベストアンサー

エクセル時間毎ごとにマクロを実行するやり方。

 初めまして、よろしくお願いします。より正確な指定時間毎にマクロを実行させるやり方を考えています。  1分毎ごとにマクロを実行する nextTime = Now() + TimeValue("00:01:00") Application.OnTime nextTime, "時間毎ごとに実行" というやり方は解るのですが、 Application.OnTime TimeValue("09:00:00"), "時間毎ごとに実行"  この指定時間("09:00:00")に実行するマクロを利用し ("09:01:00")、("09:02:00")、("09:03:00")、("09:04:00")、("09:05:00"),・・・・・の時間、秒が00になると("hh:ss:00")マクロを実行されるやり方は有るのでしょうか。  もし有るのでしたら、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.2

例えばこんな感じでしょうか。 Dim SetTime As Date Private Sub Test() Range("A1").Value = Time SetTime = TimeSerial(Hour(Time), Minute(Time) + 1, 0) Application.OnTime SetTime, "Test" End Sub Sub TimerSet() SetTime = TimeValue("09:00:00") Application.OnTime SetTime, "Test" End Sub Sub TimerCancel() Application.OnTime SetTime, "Test", , False End Sub

kei__2000
質問者

お礼

 回答ありがとうございます。このやり方でうまくできました。大変助かりました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>この指定時間("09:00:00")に実行するマクロを利用し この意図がイマイチ見えませんが,こんな手もあります。 例: 今から5秒後から1秒ごとにMainをとりあえず30000回ほど実行してみる sub setup()  dim StartTime as date  dim Interval as date  dim Counter as double  dim i as double    starttime = now + timeserial(0, 0, 5)  interval = timeserial(0, 0, 1)  counter = 30000  for i = 0 to counter   application.ontime starttime + interval * i , "main"  next i end sub sub main()  range("A65536").end(xlup).offset(1) = now end sub #つまり一体何時になったら止めていいのかとか,そういった検討事項も必要になってきますね。

kei__2000
質問者

お礼

 回答ありがとうございます。おもしろいものを教えていただき、参考にさせていただきたいと思います。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

確認することが出来ないので、考え方だけです。 If Time()<TimeValue("10:00:00") nextTime = Now() + TimeValue("00:01:00") Application.OnTime nextTime, "時間毎ごとに実行" End If として10時まで実行される様にする。 Private Sub Workbook_Open() If Time()<TimeValue("09:00:00") Then Application.OnTime TimeValue("09:00:00"), "時に実行" Else Application.Run XXXX End If End Sub ThisWorkBookにOpen(開いたときに実行させる。) 9時より前に起動した場合は、9時になったら実行が始まる。 9時より後に起動した場合は、即実行

kei__2000
質問者

お礼

 回答ありがとうございます。参考にさせていただきたいと思います。

関連するQ&A

  • 「一定の時間間隔で5秒毎にマクロを実行する」

    Timer関数を使ったループ 「一定の時間間隔で5秒毎にマクロを実行する」 ようにしてMacro1を実行したいのですが、 うまくいきません。どう改変したらいいでしょうか。 Sub Macro2() Dim tt As Double Dim wt As Double tt = Now + TimeValue("00:00:05") '5秒後 wt = TimeValue("00:00:01") 'インターバル1秒 Application.OnTime TimeValue("00:00:05"), "Macro1", TimeValue("00:00:01") End Sub

  • エクセルのマクロのタイマー機能について

    エクセルのマクロのタイマー機能について エクセルのマクロで指定した時間ごとにURLをクリックするマクロを作っています。 下記のように作っていますが、もっと簡略化して短い記述にしたく思います。 URLと指定時間は別のマクロで生成して、URLはA1~A49まで、指定時間はB1~B490までセルに書きこむようにしています。 URLはA49まで読んだらA1から読み直して10往復して、490回使用します。 使用するセルを一回ごとにずらしていくだけなので、簡単に出来そうな気もしますが、マクロ初心者のためわかりません>< 恐れ入りますが、ご教授いただければ幸いです。 ちなみにエクセル2007で作成しています。 Sub 一定の時間間隔でマクロを実行する() '進捗状況を示すために準備する 指定時刻 = Now + TimeValue("0時00分05秒") 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規01", TimeValue(待ち時間) End Sub Sub 新規01() Range("A1").Select 'A列のURLを取得 Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True 指定時刻 = Now + Range("B1").Value 'B列の時間を取得 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規02", TimeValue(待ち時間) End Sub Sub 新規02() Range("A2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True 指定時刻 = Now + Range("B2").Value 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規03", TimeValue(待ち時間) End Sub         ↓    同様の記述を490回繰り返す         ↓ Sub 新規建設490() Range("C1").Value = Now & " 終了" End Sub Private Sub 進捗状況を示すために準備する() Cells.Clear Columns("A:A").NumberFormatLocal = "yyyy/m/d h:mm:ss" Range("A1").Select ActiveCell.Value = Now & " 開始       " Columns("A:A").EntireColumn.AutoFit End Sub

  • Excel TimeValueをしようしたループマクロの待機中のCPU開放について教えて頂けませんでしょうか?

    質問1: 10秒間隔で”解析1”のマクロを実行する下記のPrgですと待機の10秒間 ビジーになってしまいます。解決方法ご存知の方教えて下さい。 Sub 解析1実行用ループマクロ() Do 指定時刻 = Now + TimeValue("0時00分10秒") '10秒後 待ち時間 = TimeValue("0時00分05秒") Application.OnTime TimeValue(指定時刻), "解析1", TimeValue(待ち時間) Loop End Sub  (マクロ集引用しただけで理解はあまりできていません。) 質問2: ループを終了させるのにEscで終わらせています。Escをボタンに登録しようと思ってますが他にスマートな方法有りますでしょうか?

  • エクセルシートの順繰り表示マクロについて

    エクセルにて随時更新されるデータを全画面表示し、3枚のシートを5秒置きに順繰り表示させるようマクロを組みました。始めは順調なのですが、数時間たつとフリーズしてしまいます。そもそもエンドレスのマクロプログラム実行に無理があるのでしょうか。 または下記のプログラムに問題があるのでしょうか。ご教授お願いします。 Sub Macro1() Sheets("Sheet2").Select Application.OnTime Now + TimeValue("00:00:05"), "Macro2" End Sub Sub Macro2() Sheets("Sheet3").Select Application.OnTime Now + TimeValue("00:00:05"), "Macro3" End Sub Sub Macro3() Sheets("Sheet1").Select Application.OnTime Now + TimeValue("00:00:05"), "Macro1" End Sub

  • EXSEL OnTime

    OnTimeを使ったタイマーですが、サンプルを利用して実行させると次のようなエラーになってしまいます。 「マクロ’I:¥一定時間後にxls'実行マクロ'が見つかりません。」 なにか設定する事項でもあるのでしょうか? Option Explicit Dim 待ち時間 Dim 指定時刻 Sub 一定の時間間隔でマクロを実行する() 指定時刻 = Now + TimeValue("0時00分05秒") '5秒後 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "実行マクロ名", TimeValue(待ち時間) End Sub Sub 実行マクロ名() Dim wavfile As String wavfile = "C:\Windows\Media\ringin.wav " 'wavファイルのパス Shell "mplay32.exe /play /close " & wavfile End Sub

  • OnTimeを使ったのですが「エラー」になってしまいます

    VBA でOnTimeの「サンプル」を使ってのタイマーですが、実行すると次のようなエラーが出て、実行マクロへ行けません。 「マクロ"I:\一定時間後に.xls'!実行マクロ名'が見つかりません。」 どうしてなのか教えてください。 Option Explicit Dim 待ち時間 Dim 指定時刻 Sub 一定の時間間隔でマクロを実行する() 指定時刻 = Now + TimeValue("0時00分05秒") '5秒後 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "実行マクロ名", TimeValue(待ち時間) End Sub Sub 実行マクロ名() Dim wavfile As String wavfile = "C:\Windows\Media\ringin.wav " 'wavファイルのパス Shell "mplay32.exe /play /close " & wavfile End Sub

  • 「一定の時間間隔で5秒毎にMacro1を実行する」

    「一定の時間間隔で5秒毎にMacro1を実行する」 一応startマクロ、stopマクロは作成してみたのですが、 下記stopコマンド実行しても止まらなかったような気がします。 ここから改変するとしたらどうですか? Public timestop As Boolean Sub test() Dim tt As Double Dim wt As Double tt = Now + TimeValue("00:00:05") '5秒後 wt = TimeValue("00:00:02") 'インターバル2秒 Application.OnTime tt, "Macro1", wt If (timestop = False) Then Time = Timer Application.OnTime earliesttime:=(Now + TimeValue("00:00:01")), procedure:="test" End If End Sub ---------------------------------------- ここからstart,stopマクロ Sub t_start() timestop = False Call test End Sub Sub t_stop() timestop = True End Sub

  • Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが

    Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが、以下のエラーメッセージが出ました。 マクロ "C:\aaa\Timer.xls'!Record1'が見つかりません。 マクロは、Timer.xlsブックのThisWorkbookに記述しています。 ---------------------------------------------------------------------- Sub timer1() 指定時刻 = TimeValue("09:00:00") 終了時刻 = TimeValue("11:00:00") Application.OnTime 指定時刻, "Record1" End Sub ---------------------------------------------------------------------- Sub Record1() Dim sh1, sh2 If TimeValue(Now) >= 終了時刻 Then '終了時刻になら終わる MsgBox "終了時刻になりました。" Application.CutCopyMode = False Exit Sub End If Set sh1 = Worksheets("1") Set sh2 = Worksheets("2") sh1.range("G5:G506").Copy 'コピー sh2.range("Q5:Q506").PasteSpecial Paste:=xlValues Selection.Offset(0, 2).Select '2行ずらす 指定時刻 = Now + TimeValue("00時05分00秒") '5分後 Application.OnTime 指定時刻, "Record1" End Sub ---------------------------------------------------------------------- どこを直せばよろしいのでしょうか? よろしくお願いします。

  • タイマーマクロの二重起動防止をしたい

    おねがいします。 Sub SetTimer() On Error Resume Next '時間変更注意 Application.OnTime TimeValue("00:00:30"), "強制終了" '時間変更注意 Application.OnTime TimeValue("00:10:00"), "SetTimer" '時間変更注意 Application.OnTime TimeValue("00:10:30"), "フォルダ作成" '時間変更注意 Application.OnTime TimeValue("23:52:00"), "プリント" '時間変更注意 Application.OnTime TimeValue("23:54:00"), "DB保存" '時間変更注意 Application.OnTime TimeValue("23:56:00"), "DBから日別保存へコピー" '時間変更注意 Application.OnTime TimeValue("23:58:00"), "表のクリア" UserForm16.Show End Sub 以上ののマクロを作成、実行します。 23時52分から一連の作業をして、0時10分に自ら次回のタイマー予約を踏むマクロです。 エクセルは、無人で24時間自動起動させています。 一番最初(ブックを開く)に、どのタイミングでスタートするかわからないので、 workbookプロシージャに workbook.openのタイミングで Call SetTimerを入れてあります。 印刷が二回発生して気付いたのですが、 このままだと、0時2分に再起動がかかり、ブックを開きなおします。 (SetTimer) で、0時10分に自己発動タイマーが働きますよね。(SetTimer二回目) すると、一連の作業は二重実行されてしまい、困ってます。 マクロ自身にフラグを持たせるんですか? なんとか、一度だけ実行をすることはできないんでしょうか? 教えてください。おねがいします。

  • エクセル VBA タイマー 0:00:00で

    5分ピッチで 仕事させます。 ブックオープンで インターバル = TimeValue("00:05:00") Application.OnTime Format(開始時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間 Debug.Print "st" & 開始時刻 Call timer_set 反復時刻 = 開始時刻 If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then 反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10") Else 反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル End If ループで5回ほど Application.OnTime Format(反復時刻, "hh:mm:ss"), "orgdata.必要な作業を行うマクロ", 待ち時間 Debug.Print "loopexit" & 反復時刻 で、デバッグアウトが end 2013/08/15 3:02:00 st 2013/08/14 23:50:10 loop2013/08/14 23:55:10 loop2013/08/15 00:00:10 loop2013/08/15 00:05:10 loop2013/08/15 00:10:10 loopexit2013/08/15 00:15:10 makuro 2013/08/15 00:20:10 makuro 2013/08/15 00:25:10 makuro 2013/08/15 00:30:10 で、「必要な作業を行うマクロ」 で 仕事のあと タイマー追加します。 If Format(反復時刻, "hh:mm:ss") > "23:54:00" Then 反復時刻 = Format(DateAdd("d", 1, 反復時刻), "yyyy/mm/dd") & " " & TimeValue("0:00:10") Else 反復時刻 = Format(反復時刻, "yyyy/mm/dd") & " " & TimeValue(反復時刻) + インターバル ' End If Application.OnTime Format(反復時刻, "hh:mm:ss"), "必要な作業を行うマクロ", 待ち時間 (反復時刻を 時間だけの時 formatを 入れて・・・) Debug.Print "makuro " & 反復時刻 ’これが デバッグで出力されています。 で、ダミーの作業が clup = clup + 1 orgdata.Cells(clup, 10) = Format(Now, "yyyy/mm/dd") orgdata.Cells(clup, 11) = Format(Now, "hh:mm:ss") orgdata.Cells(clup, 12) = Format(反復時刻, "yyyy/mm/dd") orgdata.Cells(clup, 13) = Format(反復時刻, "hh:mm:ss") 結果 2013/8/14 23:50:10 2013/8/15 0:20:10 2013/8/14 23:55:10 2013/8/15 0:25:10 2013/8/15 0:00:10 2013/8/15 0:30:10 これで、タイマー作業が 途切れます。 0:00:00 超える事に 問題があるなら 0:00:10 は 実行されないハズ・・・・ 反復時刻は yyyy/mm/dd & ” ” & ”hh:mm:ss” です。 試しに 時刻だけでやっても 同じでした。 さて、如何でしょ? 実は これで、動いていたのですが、3日ほど前から 0:00以降 突然タイマーが動かなくなったのです PCは 3台 同じ現象です よって WINの設定では無い・ エクセル オプションに 何か設定でもあるのか?? どうも VBAのタイマーは不可解で エクセル終了させず、 プログラムだけ終了、再ロードだと、前のタイマー残ったまま、ダブルでタイマー動くとか・・・・ それと、WIN32とかの 別のタイマー使った方が 良いのでしょうか??

専門家に質問してみよう