Excelマクロでタイマーを使用して自動更新は可能か?

このQ&Aのポイント
  • Excelマクロを使用して、タイマーを設定して自動更新することは可能ですか?
  • Excelマクロ初心者が、現時刻を手動で更新する必要があるが、タイマーで自動更新する方法を知りたい。
  • セルに自動更新時間を設定し、その時間間隔でタイマーを実行し、自動で更新する方法を教えてください。
回答を見る
  • ベストアンサー

Excelマクロにて、タイマーで自動更新は出来るのでしょうか?

Excelマクロにて、タイマーで自動更新は出来るのでしょうか? Excelマクロの初心者です。 最近関数にて、時間の計算を行うbookを作成しましたが、 下記の様に手動で現時刻欄を更新している状態です。 (これは1カ所ですが、実際には複数箇所を行いたいです。) Sub 残り時間を更新() ' Range("C21").Select '現時刻欄を選択 ActiveCell.FormulaR1C1 = "=NOW()" '使用開始時刻欄に現時刻を再設定 Application.CutCopyMode = False End Sub これを別のマクロにくっつけて、例えば10分おき位に自動で 更新が出来る様な事は出来ますでしょうか? 理想は、セルに自動更新時間が任意に設定でき、その数字の基で タイマーが時間が決まり、実行ボタンでタイマー開始、停止ボタン で実行キャンセルといった、VB上では出来そうな事をExcel上 でも可能でしょうか? 良きアドバイスをいただきたいと思います。 よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#1のimogasiさんのご指摘の「初心者が行う域を超えている」というのは、私も同感です。Excelでも作れますが、APIタイマーは、やむにやまれず、どこかで発表したことがあります。 GetTickCount, SetTimer 等を使いますから、調べてくださってもよいです。ただ、正直なところ、実験的というか、かなり微妙というか、安定性が今ひとつのような気がしますね。今でも、お仕事で使う方にとっては中途半端なものを作って申し訳ないと思っています。 イベントの一種ですから、稼働中でも、Excelやマクロは動きます。ファイルを閉じなければよいです。 しかし、以下のように、UserForm で、OnTime と組み合わせたほうがよいと思います。時間表示も可能です。理由は詳しくは知らないのですが、UserForm の中は、独立して動くことが多いです。ただし、UserFormを立ち上げていると邪魔ですから、GetWindowLong, SetWindowLong, で、隠す方法があります。 これに、OnTime を別に設定させればよいです。 >実行ボタンでタイマー開始、停止ボタンで実行キャンセル これは、ヘルプを参照してください。安定して使用できます。 分からなければ、しばらくの間でしたら、その辺りの返事を含めて書きます。 ただし、UserForm 起動はフラグを立てて、起動しているのを忘れて、ファイルを閉じないような安全装置は付けてください。ハングする可能性があります。 '//UserForm プロパティは、ShowModal False '//Labelをひとつ用意してください。 Private Sub UserForm_Activate() Dim currentTime As String  While UserForms.Count > 0   currentTime = Format$(Time(), "h:nn:ss")  If currentTime <> Label1.Caption Then   Label1.Caption = currentTime  End If   DoEvents  Wend End Sub Private Sub TimerRefresh()  If UserForms.Count = 0 Then Exit Sub  UserForm1.TimerRefresh End Sub

pp_kyon
質問者

お礼

ご指摘をありがとうございました。 Excelでは厳しいという事がわかりました。 PCのスペックもかなり悪いですし、ハングしたら そのまま壊れそうな・・・。 ですので、手動更新等の別の方法で考えたいと思います。

その他の回答 (4)

  • goo39
  • ベストアンサー率36% (13/36)
回答No.5

私ならExcelでのタイマー処理は Application.OnTime を使用します。

pp_kyon
質問者

お礼

アドバイスをありがとうございました。 タイマーでマクロを実行させようと思ったのですが、 肝心のPC等の能力や負荷の事を想定しておりませんでした。 スペックがかなりマシンですので、手動更新等の別の方法 で再検討したいと思います。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

windows APIを使えば可能だと思います。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) と宣言しておき必要なところで Sleep 1000 で1秒休みます(CPUのの使用権はOSに戻る) どこにこのコードをどう入れるかは十分検討してください。

pp_kyon
質問者

お礼

アドバイスをありがとうございました。 PC等の能力や負荷の事を想定しておりませんでした。 スペックがかなり悪いので、別の方法で再検討したい と思います。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

インターバルタイマを使うにはプログラムが稼働 していなければなりませんが、プログラム実行中は Excelの操作はできません。つまり、Excelでも 操作し、かつタイマも使いたいと言うのは不可能 です。「DoEventsを使えば」というのはもの凄く 効率が悪く(何もしなくてもCPU使用率100%のまま)、 かつ事故が起き易い方法なので、とても採用でき ない方法です。 また、VBAはマルチスレッドに対応していないので、 APIを使っても対応できません。

pp_kyon
質問者

お礼

ご指摘をありがとうございました。 PCに掛かる負荷の事を考えておりませんでした。 別の方法に変更しようと思います。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

VBA出出来ると思うが、マクロの初心者が行う域を超えていると思う。 また不安定だと思う。エクセルの起動をしておく問題とか。 こういうのはエクセルVBAの範囲を超えている。なんでもエクセルの誤り・不適当例ではないか。 これ(タイマーなど)を使わないような処理設計を考えるべきです。 やりたいことの(本件との絡みだけで良いが)全貌を文章で書けないか。 それの道具立てを識者に批判してもらっては。 質問があいまいで良くわからないが、発想が質問者の思いつきで、普通とは違う路線になっているようにおもう。 いままで勤怠管理・時間外計算でエクセル関数で処理するパターンと、質問者のニーズはどう違うのか。

pp_kyon
質問者

お礼

ご指摘をありがとうございました。 Excelでは厳しいという事がわかりました。 別の方法で考えたいと思います。

関連するQ&A

  • VBA マクロ タイマーカウントダウンの自動停止

    マクロの初心者です。どなたか教えていただけないでしょうか? お手数おかけします。 2つ質問があります。 1つ目の質問: Option Explicit Private TB As Integer Private MacroStop AS Boolean Private ZAN As Integer Private C As Integer ・・・ Sub 現在時刻から時分秒を取り出す() ・・・・ End Sub Sub 時間計算()     ・・・・      Range(”E8”) = TB Sub 指定時刻にマクロを実行する()     mywait = 1      ’1秒 指定時刻 = Now + TimeSerial(0,0,mywait)     If ZAN >= 0 Then If MacroStop = False Then Application.OnTime  指定時刻,"指定時刻にマクロを実行する     Call やりたいこと     Else End If Else     MacroStop = False     End If Range("K16" ) = Range("K16") + 1 End Sub Sub やりたこと()     C = C +1     ZAN = TB - C      ・・・・     Total= HH&”:”&MM&”:”SS     Range(”D12”)=Total Sub タイマー停止()     MacroStop = True     Range(”E8”).ClearContents     Range(”D12”).ClearContents End Sub 仮にTBの初期値が28800(8時間)、Cの初期値が0だとして、     タイム イズ オーバーになった場合、    たとえばZAN < 0    のとき、    タイマーマクロが自動停止し、     Range(”K16”) = Range(”K16”) + 1     とフラグをたててカウントアップさせるなど考えましたが、     ZANは、28800、28799、28798・・・トと正常にカウントダウンし、     自動では止まりますが,     Total = 0:0:-1でおわり、(0:0:0でおわりたい)    しかもフラグカウンターは1,2,3,4・・・と秒刻みでカウントアップしてしまいます。     カウンターは、1回のタイマーが終われ(28800秒たてば)ば、1カウントアップさせたいのです。    どのようにプログラムを組めば、タイマーが0:0:0で自動停止し、    またカウンターもタイマー(暫定:28800秒=8時間)たてば1カウントアップさせることが    できるのでしょうか?    2つ目:タイマー作動中は、画面が強制的に左寄せ・上詰めになってしまい、自由にスクロール     できません。どうすれば自由にスクロールさせることができるのでしょうか?    以上、2点です。よろしくお願いします。

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

    エクセルのマクロのタイマー機能について エクセルのマクロで指定した時間ごとに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

  • エクセルマクロ自動更新

    マクロを1分おきに自動実行するには どうすればよいでしょうか? ※webクエリの更新時間と連動できるとなおよいです よろしくお願いします

  • 毎日指定時刻に自動でエクセルを開き、マクロを起動する方法

    <前提条件> ・パソコンを常に起動している(シャットダウンはしない) ・TEST.xlsにマクロ作成済 <お聞きしたいこと> ・毎日指定時刻(15:30)にTEST.xlsを開き、登録されている  マクロを自動で実行したい <私の考え> ・TEST.xlsに下記マクロを登録しようと思っております。  ただ、下記だけですと、「指定時刻にエクセルを開く」と、  「毎日指定時刻に自動でマクロを実行する」ことができません。  あまりマクロについて知識がないため、ご教示のほどよろしくお願いいたします。 Sub 指定時刻にマクロを実行する() Application.OnTime TimeValue("15:30:00"), _ "MSGBOX", _ TimeValue("00:00:30") End Sub Sub MSGBOX() msgbox"TEST" End Sub 

  • どのファイルを開いた時もマクロを自動実行。エクセル

    新規にエクセルを開いたときだけマクロを自動実行するには、 personal.xlsで Sub auto_open() ' Macro1 Macro Range("A1").Value = "111" End Sub とすれば良いかと思いますが、 新規に開くどのファイルに対しても ファイル名ABC を含んでいる時だけ マクロを自動的に実行するにはどうしたらよいでしょうか? (ファイルを開いてから マクロボタンを押して マクロに”ファイル名を チェックしてA1にデータを書き込む”があるのはだめです。) (アドインでツールバーボタンを押すのもだめです。) エクセルは2003 OSはXPです。 説明不足でしたらすみません。

  • 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 ---------------------------------------------------------------------- どこを直せばよろしいのでしょうか? よろしくお願いします。

  • エクセルVBAでタイマーコントロールは使えますか

    エクセルVBAでタイマーコントロールは使えますか。 エクセルVBAで、ある時刻になったらマクロを実行させたいと思っています。 無限ループの中にTIME関数で時刻を呼び出し、それをIF文で判定して、 一定時刻にマクロを実行させるものは作りましたが、CPU負荷が高く、24時間 連続で動作させることに不安を感じています。 この他に、VBのタイマーコントロールのような機能を持つオブジェクトや 便利機能等があったら教えていただけませんか。 (一応、VBで時刻管理をするプログラムを作ってそこからエクセルVBAを呼 び出す方法やタスクスケジューラでエクセルVBAを呼び出す方法、ATコマンド 等も考えていますが、可能ならエクセルVBAで閉じて処理をしたい)。 尚、私はWindowsMe+エクセル2000でVBAを作成しています。 実際にVBAを動かすのは、WinsowNT4.0サーバー+エクセル2000を予定してい ます。

  • マクロの自動記録

    Excelのマクロ自動記録に関する質問です。 ソルバーを繰返し含む処理をマクロの自動記録で実行したいのですが、Excelのシート上で1つづつ手で実行すると問題なく処理出来ている手順を自動記録して実行すると“コンパイルエラー:SubまたはFunctionが定義されていません”とエラーが出ます。 下記の“SolverOk”の部分に問題があると表示されます。 Range("D19").Select ActiveCell.FormulaR1C1 = "180" Range("D19").Select Selection.Copy Range("J19").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Range("D24").Select Application.CutCopyMode = False Selection.Copy Range("J22").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False SolverOk SetCell:="$M$18", MaxMinVal:=3, ValueOf:="0", ByChange:="$D$19" SolverSolve   ---   --- どうすれば解決できるか教えて下さい。 よろしくお願いします。

  • エクセルのブックを開いた時にマクロを自動定期に実行したいのですが。

    エクセル97でブックを開いたときに、自動的にマクロを実行させたいのですが、どのようにマクロを記述すればいいのか教えて頂けませんか。 sub autorun() sheets(2).select sheets(1).cells(2,2)=cells(5,5) end sub のように、シート2のある数値をシート1のセルに自動的に貼付したいのですが。 このマクロは自動的には実行されませんので、どうすれば自動的に実行するようにできるのかが知りたいのですが。 よろしくお願いします。

  • エクセル マクロについて。

    エクセルでマクロを組んだブックを3台のPCで共有して、 5分で自動更新しています。 しかしそれぞれのPCで別のアプリを実行しているため、 エクセルが隠れてしまい、変更があった時も見逃して しまいます。 そこで、自動更新ごと又は、一定時間ごとにエクセルの画面を デスクトップの最前面に表示して目につきやすくしたいのです。 マクロ等で対応はできないしょうか?

専門家に質問してみよう