• ベストアンサー

エクセルVBA 時間のカウントダウン

エクセルを起動後、A1セルに10分のカウントダウンタイマーを「分:秒」で表示する方法(VBA)をご教示頂けないでしょうか。 よろしくお願い致します。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

1レスです。 きっと、もっとずっと簡単に出来るとお考えなのでしょう。 例えば、ユーザーがどこかのセルを編集状態にしたらば、 どうやっても、カウントダウンを進める(VBAからセル値を変える)ことは出来ません。 そういう理由から、ユーザーフォームに表示させるのが一般的ではあります。 何故、セルに表示させたいのでしょう? 10分の間、ExcelやVBAは何もしないのでしょうか? 途中でカウントダウンを止めたり、ブックを閉じたりすることはあるでしょうか? そもそも何故カウントダウンが必要なのでしょう? 等々、疑問は多数湧いてくるものの、すべてに応える体力はありません。 経験してみないと、こちらが何を言っているのかも解らないと思います。 一応、書かれたオーダーには応えています。 中でも無難な(トラブルの少ない)手法を選んだつもりです。 ただ、これが(仕様的に)実際に役に立つのかどうかは、ご本人にしか判りません。 これはあくまでテスト用サンプルです。 テストしてみて求める仕様との違いを確かめながら、仕様をはっきりさせて、 改めて、全体を見通して設計を見直してみてください。 若しくは、目的、用途、条件、といったことを十分に文章化した上で、 あらたに相談するとか、質問を建て直した方が、解決は近いと思います。 ご使用の環境が書かれていませんので、念の為、標準モジュールの記述は Excel 32ビット版・64ビット版、両方、別々に書いておきました。 どちらかを正しく選ばないとコンパイルエラーになります。 ThisWorkbookモジュールの記述は共通です。 ' ' 〓〓〓〓〓〓〓〓標準モジュール・32ビット版〓〓〓〓〓〓〓〓 Option Explicit Public flgStopTimer As Boolean Private Declare Function SetTimer Lib "user32" _             (ByVal hwnd As Long, ByVal nIDEvent As Long, _             ByVal uElapse As Long, ByVal lpTimerFunc As Long) _             As Long Private Declare Sub KillTimer Lib "user32" _             (ByVal hwnd As Long, ByVal nIDEvent As Long) Private oTargetRange As Range Private dtTargetTime As Date Private nTimerIdx As Long Private Const dtTimeSpan As Date = #12:10:00 AM#   '  10分後 Private Const nIntervalMilliSecond As Long = 1000&  '  1秒間隔 Sub TestCountDown()   Call StartCountDown End Sub Private Sub StartCountDown()   dtTargetTime = Now + dtTimeSpan   Set oTargetRange = Sheets("Sheet1").Cells(1, "A")   oTargetRange.Value = dtTimeSpan   oTargetRange.NumberFormat = "mm:ss" '  With Cells(2, "A") '    .Value = dtTargetTime '    .NumberFormat = "h:mm:ss" '  End With   nTimerIdx = SetTimer(0&, 0&, nIntervalMilliSecond, AddressOf RcvEvent) End Sub Private Sub RcvEvent(ByVal hwnd As Long, ByVal uMsg As Long, _           ByVal idEvent As Long, ByVal dwTime As Long)   If Now > dtTargetTime Or flgStopTimer Then     KillTimer 0&, idEvent     nTimerIdx = 0&     Set oTargetRange = Nothing   Else     On Error Resume Next     oTargetRange.Value = dtTargetTime - Now     On Error GoTo 0     DoEvents   End If End Sub Private Sub StopCountDown()   KillTimer 0&, nTimerIdx   nTimerIdx = 0&   Set oTargetRange = Nothing End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ' ' 〓〓〓〓〓〓〓〓標準モジュール・64ビット版〓〓〓〓〓〓〓〓 Option Explicit Public flgStopTimer As Boolean Private Declare PtrSafe Function SetTimer Lib "user32" _             (ByVal hwnd As Long, ByVal nIDEvent As LongPtr, _             ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) _             As LongPtr Private Declare PtrSafe Sub KillTimer Lib "user32" _             (ByVal hwnd As Long, ByVal nIDEvent As LongPtr) Private oTargetRange As Range Private dtTargetTime As Date Private nTimerIdx As LongPtr Private Const dtTimeSpan As Date = #12:10:00 AM#   '  10分後 Private Const nIntervalMilliSecond As Long = 1000&  '  1秒間隔 Sub TestCountDown()   Call StartCountDown End Sub Private Sub StartCountDown()   dtTargetTime = Now + dtTimeSpan   Set oTargetRange = Sheets("Sheet1").Cells(1, "A")   oTargetRange.Value = dtTimeSpan   oTargetRange.NumberFormat = "mm:ss" '  With Cells(2, "A") '    .Value = dtTargetTime '    .NumberFormat = "h:mm:ss" '  End With   nTimerIdx = SetTimer(0&, 0^, nIntervalMilliSecond, AddressOf RcvEvent) End Sub Private Sub RcvEvent(ByVal hwnd As Long, ByVal uMsg As Long, _           ByVal idEvent As LongPtr, ByVal dwTime As Long)   If Now > dtTargetTime Or flgStopTimer Then     KillTimer 0&, idEvent     nTimerIdx = 0^     Set oTargetRange = Nothing   Else     On Error Resume Next     oTargetRange.Value = dtTargetTime - Now     On Error GoTo 0     DoEvents   End If End Sub Private Sub StopCountDown()   KillTimer 0&, nTimerIdx   nTimerIdx = 0^   Set oTargetRange = Nothing End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ' ' 〓〓〓〓〓〓〓ThisWorkbookモジュール 共通版〓〓〓〓〓〓〓 Private Sub Workbook_BeforeClose(Cancel As Boolean)   Application.Run "StopCountDown" End Sub Private Sub Workbook_Open()   Application.OnTime Now, "StartCountDown" End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

Maruk2013
質問者

お礼

御礼が遅くなりました。私はVBAは全く分からないのですが、安易な質問で大変な労力をおかけしました。 しかし、お蔭様で頂いた方法で初期の目的を達することができました。有難うございました。 ご指摘の通り、安易にできると考えておりましたので、今後は質問のし方も考えたいと思います。拝

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Javascriptでカウントダウン

    急いでいます。 Javascriptで、アクセスして読み込まれるとき、読み込まれてから20秒だけカウントダウンしたいのですが、どのようにすればよいのか分かりません。 初めに20と表示され、19,18,17,16, ..... 3,2,1,0で終わるようなカウントダウンタイマーを作りたいんです。できれば2桁だけ小数も表示させたいです。19.04 19.03 19.02 19.01 19.00 ..... よろしくおねがいします。

  • エクセル VBA

    エクセルのVBAでの質問です。 1つのセルの中にカンマで処理したデータがあるとします。 例えば A組,32番,山田太郎,男,12歳,45人中35位,性格明るい この1つのセルでたとえば3番目だけの「山田太郎」を VBAで取り出す方法はあるのでしょうか。 要するに1つのセルの中でカンマで区切られたデータを 個々に取り出す方法か知りたいのです。 どなたか教えてください。 なぜこのようなことが必要かといいますと、 歯科において、レセ電が導入されることになりました。 そこでそれを開発しているのですが、 最後に点数の検算をしようと考えていまして、 その点数をセルから取り出す方法が知りたいのであります。 もしどなたかご存知でしたら、是非、ご教示ください。 よろしくお願い申し上げます。

  • Excel VBAについて教えて下さい。

    VBAについて2点ほど質問があります。 (1)複数セル(例:A2:A40)に入力されている文字列を一括で数値に変換するVBAはありますか? (2)複数セル(例:A2:A40)に日付と時間が入力されていて(例:2019/09/12 16:00)、それを一括で日付と時間それぞれ別々のセルへ表示させるVBAはありますか? 現状、1つのセルしか変換できず複数一度には難しいのでしょうか? お分かりの方いましたら、是非ご教示お願い致します。

  • パワポでカウントダウン

    パワポでカウントダウン パワーポイントで、モニターに流す資料を作っています。 色々なイベントの案内をスライドショーで流していく形なのですが、その中の1枚に申込み締切いつまで!というカウントダウンのページを入れたいと考えています。『もう秒単位で迫ってきている』という感じを出したいので、出来たら1/10秒の位までカウントダウンして、『ドンドン時間がなくなってきているぞ』という内容にしたいんですね。 エクセルのVBAの知識は少しありますので、コントロールツールボックスのテキストボックスを使って…と考えたのですが、スライドショーが始まってから、そのページが表示されている時だけマクロを動かすやり方もわからなかったので、どうしようか困ってます。 何か良いアドバイスありましたら、お願い致します!!m(_ _)m

  • javascriptを用いたカウントダウンタイマ-

    javascriptを用いた、カウントダウンタイマーの方法を教えて頂けないでしょうか? 【午前9時からカウント開始】(あと”9時間59分59秒")       ↓ 【午後19時に終了】(あと”0時間00分00秒") ※毎日繰り返し (午後19時から午前9時までの間は、何かコメントを表示させておく。) このようなカウントダウンも出来るものなのでしょうか? 超初心者ですが、独学で勉強したくて色々見てますが…、難しくてなかなか…。 どなたか、お知恵を貸して頂けたら、幸いです。 宜しくお願いします。

  • カウントダウンタイマーでのタイマーの表示方法

    VBを始めたばかりなです。 プログラムで-していく、カウントダウンタイマーを作成したのですが、1:30と設定すると90秒表示となり、どうしても01:30という分と秒の表示が出来ません。 カウントされる数字が、何分何秒という表示にさせる方法を教えて下さい 表示のプログラムは以下の通りです。 hyouji.Text = Format(waitsecond, "##:##") ※hyouji.textはタイマーを表示させる部分の名前です。

  • 時間の変換

    Excelで秒を分と秒に表示する方法を教えてください。 例えばセルA1に135と入力するとセルB1に2分15秒と表示される方法です。 どの関数使えばよいか全然判りません。 以上よろしくお願いします。

  • EXCELで時間の足し算はどの桁まで可能ですか?

    こんばんは。 EXCELで時間の足し算をしています。 このうち2.5秒を足し算するともB3セルに”2秒”と表示され、差分計算すると”3秒”と表示されます。 例) A1セル =2008/10/1 10:00:05 (入力値) A2セル =A1+"0:00:05"   ⇒表示 2008/10/1 10:00 A3セル =A2+"0:00:02.5"  ⇒表示 2008/10/1 10:00 B2セル =A2        ⇒表示 10時00分10秒  B3セル =A3        ⇒表示 10時00分12秒  ☆表示が異なる! C3セル =B3-B2       ⇒表示 0時00分03秒   ☆表示が異なる!                   ※見かけで認識しているなら2秒になりますよね。 実際のセルは、見かけで動いているの?、それとも0.5秒も認識している?か不安になり質問しました。 セルの書式設定では見かけは秒単位までしか表示ができませんが、実際のところμ秒単位まで見たいです。 これを表示することは可能ですか?

  • Excelによる時間入力

    ExcelでセルA1には1時間の1 セルB1には20分の20 セルC1には50秒の50 セルD1には100分の1の40と 入力したら セルE1には1時間20分50秒40と表示させることは できるのでしょうか? 教えてください.

  • エクセルの時間表記について

    エクセルの時間表記について質問いたします。 あるファイルのセル A1に0:12(12秒という意味です) A2に1:15(1分15秒という意味です) A3に3:05:03(3時間5分3秒という意味です) A4に… というようにシステムから抽出された時間が列挙されています。 それらの時間を別ファイルにリンクさせ、その別ファイルでの表記を A1は12秒 A2は1分15秒 A3は1時間5分3秒 A4は… というように表示させたいのです。 セルの書式設定で h"時間"mm"分"ss"秒"という設定をすると A1は0時間00分12秒 A2は0時間01分15秒 A3は1時間05分03秒 と表示されてしまいます。 余分(0時間や00分)を表示させない方法はおありでしょうか。 また、03秒という表記ではなく、3秒という表記になればなお嬉しいです。 教えてください。よろしくお願いします。

専門家に質問してみよう