• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelマクロにて、タイマーで自動更新は出来るのでしょうか?)

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

このQ&Aのポイント
  • Excelマクロを使用して、タイマーを設定して自動更新することは可能ですか?
  • 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/17069)
回答No.1

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

pp_kyon
質問者

お礼

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

関連するQ&A

専門家に質問してみよう