
Excelマクロにて、タイマーで自動更新は出来るのでしょうか?
Excelマクロの初心者です。
最近関数にて、時間の計算を行うbookを作成しましたが、
下記の様に手動で現時刻欄を更新している状態です。
(これは1カ所ですが、実際には複数箇所を行いたいです。)
Sub 残り時間を更新()
'
Range("C21").Select '現時刻欄を選択
ActiveCell.FormulaR1C1 = "=NOW()" '使用開始時刻欄に現時刻を再設定
Application.CutCopyMode = False
End Sub
これを別のマクロにくっつけて、例えば10分おき位に自動で
更新が出来る様な事は出来ますでしょうか?
理想は、セルに自動更新時間が任意に設定でき、その数字の基で
タイマーが時間が決まり、実行ボタンでタイマー開始、停止ボタン
で実行キャンセルといった、VB上では出来そうな事をExcel上
でも可能でしょうか?
良きアドバイスをいただきたいと思います。
よろしくお願いいたします。
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
ご指摘をありがとうございました。
Excelでは厳しいという事がわかりました。
PCのスペックもかなり悪いですし、ハングしたら
そのまま壊れそうな・・・。
ですので、手動更新等の別の方法で考えたいと思います。
No.3
- 回答日時:
windows APIを使えば可能だと思います。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
と宣言しておき必要なところで
Sleep 1000
で1秒休みます(CPUのの使用権はOSに戻る)
どこにこのコードをどう入れるかは十分検討してください。
アドバイスをありがとうございました。
PC等の能力や負荷の事を想定しておりませんでした。
スペックがかなり悪いので、別の方法で再検討したい
と思います。
No.2
- 回答日時:
インターバルタイマを使うにはプログラムが稼働
していなければなりませんが、プログラム実行中は
Excelの操作はできません。つまり、Excelでも
操作し、かつタイマも使いたいと言うのは不可能
です。「DoEventsを使えば」というのはもの凄く
効率が悪く(何もしなくてもCPU使用率100%のまま)、
かつ事故が起き易い方法なので、とても採用でき
ない方法です。
また、VBAはマルチスレッドに対応していないので、
APIを使っても対応できません。
No.1
- 回答日時:
VBA出出来ると思うが、マクロの初心者が行う域を超えていると思う。
また不安定だと思う。エクセルの起動をしておく問題とか。
こういうのはエクセルVBAの範囲を超えている。なんでもエクセルの誤り・不適当例ではないか。
これ(タイマーなど)を使わないような処理設計を考えるべきです。
やりたいことの(本件との絡みだけで良いが)全貌を文章で書けないか。
それの道具立てを識者に批判してもらっては。
質問があいまいで良くわからないが、発想が質問者の思いつきで、普通とは違う路線になっているようにおもう。
いままで勤怠管理・時間外計算でエクセル関数で処理するパターンと、質問者のニーズはどう違うのか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル マクロ 指定日の指定時刻にプロシージャを実行 4 2022/04/17 16:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/10 09:06
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel_マクロ_現在開いているシ...
-
メッセージボックスのOKボタ...
-
エクセルで特定の列が0表示の場...
-
一つのTeratermのマクロで複数...
-
マクロの連続印刷が突然不可能...
-
2つのマクロでチェックボックス...
-
Excel・Word リサーチ機能を無...
-
Excel マクロ VBA プロシー...
-
ExcelのVBA。public変数の値が...
-
TERA TERMを隠す方法
-
特定文字のある行の前に空白行...
-
VBAにて別ワークブック上の実行...
-
Excelのセル値に基づいて図形の...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時エラー
-
エクセルに張り付けた写真のフ...
-
【Excel】複数のマクロをまとめ...
-
マクロ実行時、ユーザーフォー...
-
ソース内の行末に\\
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
ExcelのVBA。public変数の値が...
-
エクセルで別のセルにあるふり...
-
エクセルに張り付けた写真のフ...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
Excelのセル値に基づいて図形の...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時、ユーザーフォー...
-
オートフィルターとExcelマクロ...
-
wordを起動した際に特定のペー...
-
特定文字のある行の前に空白行...
-
エクセルで縦に並んだデータを...
おすすめ情報