Excel VBAタイマー表示について

このQ&Aのポイント
  • Excel VBAでタイマー表示を行いながらキー入力をする方法はありますか?
  • Excelで計算問題のプログラムを作成しています。タイマー表示を行いながら問題を解くようにしたいですが、キー入力を行うとタイマーが止まってしまいます。
  • 問題スタート時にタイマーを起動し、答えをキー入力してEnterキーで答え合わせをする仕組みです。指定問題数終了までタイマーを止めずに動作させる方法はありますか?
回答を見る
  • ベストアンサー

excel VBA タイマー表示について

お世話になります。 excelで計算問題のプログラムを組んでいます。 計算時間を表示しながら、問題を解くようにしたいと考えています。 タイマー表示を下記で行っていますが、セルに文字を入力するとタイマーが止まってしまいます。タイマーを動作させながら、文字入力を行うことは、Excelでは無理でしょうか? キー入力中、タイマー停止であれば、達成済みです。 動作は次のようにしています。 1)問題スタートで、下記タイマーを起動 2)答えをキー入力しEnterキーで答え合わせ 3)指定問題数終了で、タイマー停止 4)正解率、トータル時間を表示 Do Until blnStop = True Cells(3, 10) = Int((Timer - dblTimer) * 100) / 100 DoEvents Loop

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.3

> フォームが開いている間セルの操作を受け付けてくれません。 書き忘れてました フォームのプロパティでShowModalをFalseにしてください。

ken-nosuke
質問者

お礼

ありがとうございました。 希望通りの表示が出来ました。 フォームの利用は初めてですので、これから勉強したいと思います。 1の方の方法も試してみたいと思います。

その他の回答 (2)

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.2

シート上のセルに開始時刻、経過時間、終了時刻を記録しながら 並行して、 そのシート上でデータの入力などを行いたいということと思います。 私だったら、 Application.OnTime メソッド を使います。 https://excel-ubara.com/excelvba4/EXCEL299.html を参考に、以下のようにしてみてはいかがでしょうか。 Option Explicit Public mOnTime As Date Sub TimerProc()  With ThisWorkbook.Sheets(1)   .Cells(3, 4).Value = Format(.Cells(2, 4).Value - Now, "hh:mm:ss")  End With End Sub Sub OnTimeStart()  Call TimerProc  mOnTime = Now() + TimeSerial(0, 0, 1)  Call Application.OnTime(mOnTime, "OnTimeStart") End Sub Sub OnTimeStop()  '同一のProcedureとEarliestTimeがないとエラーになる  On Error Resume Next  Call Application.OnTime(mOnTime, "OnTimeStart", , False) End Sub Sub JobStart()  With ThisWorkbook.Sheets(1)   .Cells(2, 4).Value = Format(Now, "hh:mm:ss")   OnTimeStart  End With End Sub Sub JobStop()  OnTimeStop  With ThisWorkbook.Sheets(1)   .Cells(4, 4).Value = Format(Now, "hh:mm:ss")  End With End Sub

ken-nosuke
質問者

お礼

回答ありがとうございます。 ontimeメソッドはセルに入力中はタイマが止まり、入力を終えると、再稼働し正しい経過時間を示します。私の方法と同じく、タイマを動かし続けることが出来ません。

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

こちらの方法を参考にしてみたらいかがでしょう。 ユーザーフォームに時計をつけてみる https://e-vba.com/userformwatch/

ken-nosuke
質問者

補足

時計の起動/表示は、出来ましたが、フォームが開いている間セルの操作を受け付けてくれません。やり方が間違っているのでしょうか? 時計を動かしながら、セルの操作を行いたいのですが?

関連するQ&A

  • Excelでタイマーの一時停止するボタンのコードは

    Excelでタイマーを作ったけど、一時停止できないとやっぱ面白くないと気づき、一時停止機能を付け加えたいが、まだ勉強し始めたばかりなので自分でコードが書けません。 なので、一時停止させるコードがわかる方教えてください。 <タイマーのコード> Sub タイマー() Dim EndTime Dim PassTime EndTime = Timer + Range("D5").Value * 60 + Range("F5").Value Do PassTime = Timer Range("D5").Value = (EndTime - PassTime) \ 60 '分 Range("F5").Value = (EndTime - PassTime) Mod 60 '秒 DoEvents Loop Until EndTime - PassTime <= 0 Beep MsgBox "時間です" End Sub

  • excel vba フォーム DoEvent

    Excel vba  下記のようにユーザーフォームでストップウォッチを動かしています。 計算問題のプログラムを動かし、指定問題数回答後、時間を表示して停止しようとしています。 問題点: ストップウォッチ起動後、セルに数字を入力しEnterを押してもUserFormに戻ってこず、時計は止まったままになります。 継続して時間を計測、表示する方法があればご教示お願いします。 Private Sub UserForm_Activate() Dim counttime As Variant Do While kentime > 0 counttime = Int((Timer - dblTimer) * 10) / 10 ‘小数点以下が“0”の時も“.0”の表示にする If Int(counttime) = counttime Then hyoujitime = Right(" " + CStr(counttime), 5) + ".0" Else hyoujitime = Right(" " + CStr(counttime), 7) End If Label1.Caption = hyoujitime DoEvents Loop End Sub

  • エクセル 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とかの 別のタイマー使った方が 良いのでしょうか??

  • タイマーがうまく動かない

    VB6.0(SP5)で、バッチファイルを実行後、5秒待つようにしたいのですが、うまく動きません。 Dim ping_count As Long Private Sub Command1_Click() Shell ("executeping.bat") Timer1.Interval = 1000 Timer1.Enabled = True Do Text1.Text = "ただいま実行中" Timer1_Timer Loop Until ping_count = 5 Text1.Text = "終了" Timer1.Enabled = False End Sub Private Sub Timer1_Timer() ping_count = ping_count + 1 Text1.Text = "ただいま実行中" End Sub デバックで動かすと、ちゃんとループを5回繰り返してテキストボックスに「終了」と表示するのですが、実行するといきなり「終了」を表示してしまいます。 ループの中のTimer1_Timerをコメントにすると、デバックでは延々ループを続け、実行するとフリーズしてしまいます。 そもそもタイマーの使い方が間違っているのでしょうか? 教えてください。よろしくお願いします。

  • エクセル2007のVBAを使って、サウンドコントロールのフリーソフトを

    エクセル2007のVBAを使って、サウンドコントロールのフリーソフトを操作しようとしています。 具体的には、「3RVX]というフリーソフトで、パソコンの音量をミュートしたいのです。 このソフトは起動させるとタスクトレーに常駐して、自分で割り当てたホットキーを押すとミュート、ミュート解除ができます。私は「End」キーを割り当てたので、「End」キーを押すとミュートされます。これは他のソフトで動画を見ている最中でも動作しますし、今ここに質問を入力している間でも動作します。 問題は、これをエクセルのVBA(マクロ)で動作させたいのですが、上手くいかないのです。 マクロの記述は次の通りです。 Sub タイマー開始() MsgBox "タイマーがセットされました" SendKeys "{END}" End Sub メッセージボックスは表示されます。「OK」を押すと、次の命令である「SendKeys」が作動するはずなのですが、音声はミュートされません。 「End」キーの代わりに、「Delete」キーを割り当てて、マクロもSendKeys "{DELETE}"にしてみたところ、エクセル上でセルにあった文字が消えたので、「Delete」機能は作動しているのだと思います。ただ、エクセル内で作動してしまっているようです。 エクセルがアクティブであっても、手動で「End」キーを押せばミュートされるので、マクロでこれと同じ動作ができないものでしょうか? ※そもそも目的は、DVD再生している状態で、ある時刻になったら音を消したり出したりするタイマー機能を作りたいというものです。それが実現できれば、他の方法でも構いません。

  • タイマーがうまくできません

    VisualBasicにてタイマーを作ろうと思っています。(キッチンタイマーみたいなもの) プロパティの初期値としては「Timer2.Interval = 100」 別に作成したボタンで「Timer2.Enabled = True」にするプログラムをした上で Private Sub Timer2_Tick(。。。省略  hyaku = Int((hyaku - 0.1) * 10) / 10  If hyaku >= 0 Then    Label5.Text = hyaku  Else    Timer2.Enabled = False  End if End Sub というプログラムを作成しました。 しかしプログラムを実行させると通常の約2倍の速さで秒数を刻んでいきます。 だからといって上の hyaku = Int((hyaku - 0.1) * 10) / 10 を hyaku = hyaku - 0.1 にすると小数点1位未満の数字も表示されてしまいます。 もしプログラムにミスがあるなら指摘をお願いします。 またExcelの関数にある「Round」みたいなものがあれば教えてください。 よろしくお願いします。

  • タイマーと表示の連動の仕方を

    私はiPhoneSDK、xcodeを使い研究を行っています。objective-Cに慣れていないため、つまずいているところがあります。どうかご協力をお願いします。 教えてもらいたいのは、タイマーと文字の表示を連動させたいと言うことです。 タイマーアプリは以下のサイトを参照して作っています。 http://d.hatena.ne.jp/moto_maka/20081210/1228855024 これに、文字を表示するLabelを加え、タイマーが例えば5.000を刻んだら文字を表示するということをしたいです。 Labelの追加はすでに終えています。やりたいのは ”start”をタッチ{      (タイマーの動作、すでに書かれている)      if(タイマーが5.000を刻んだ){         文字を表示(ここの書き方もOK)      } } として、このifのところを仕上げたいのですがうまくいきません。文法がおかしいか、変数の設定が原因か。実装しても文字が表示されない(あるいはタッチと同時に表示)です。そのファイル(~.m)も添付しておきます。(ただし、そちらでは-5.000からスタートして0.000で表示したいというように作っています) なにとぞご協力をお願いします。

  • JavaScriptタイマーをAdobe表示

    JavaScriptで作ったカウントダウンタイマーをHTMLに表示させ、それをさらにAdobeで表示させようとしましたがうまく動きません。 HTMLで表示させてIEで実行させる分には問題なく動くのですが、これをAdobeで実行しても意味不明なところ(<script type="text/javascript">のところなど)でエラーを表示して動いてくれません。 カウントダウンタイマーはこのサイトのサンプルに少々手を加えたものです。 http://www.pori2.net/js/timer/6.html 手を加えたと言っても、リセットボタンを付け加えただけですが・・・ AdobeではJavaScriptのカウントダウンタイマーは動かないのでしょうか? 分かる方がいましたら、ご教授お願いします。

  • プログラムを一定時間とめるコードの際に24時をまたぐととまらないようにするには?

    お世話になります。 以下のコードだと24時をまたぐ際に プログラム自体が停止してしまうんでうバグがあるんですよね。ちょっと解決方法がおもいつかないので 詳しい方教えて下さい。よろしくお願いします。 st = Timer   Do While Timer - st < 3     DoEvents   Loop

  • タイマー残り時間をExcel Vbaから利用したい

    情報処理検定(表計算)用のタイマー付き模擬試験の教材を作りたいと考えています。 大まかなイメージは次のようになります。 生徒がタイマー(自作する)で制限時間を設定し、スタートボタンを押すと作業を開始することができる。制限時間が過ぎるとメッセージを出し、作業は続けることができなくなる。 タイマーの残り時間をExcelのVbaから参照するにはどのような方法があるのか、どなたか教えていただけませんでしょうか。 これに関連しそうなことで、今までに次のことやりました。 (1)Vbaでタイマーを作りました。 時間を設定し、スタートボタンを押すと、残り時間を1秒単位で更新する。残り時間が0になるとメッセージを表示して終了する。   授業では全く使っていません。タイマーが必要な時は他のフリーのソフトを使っています。 (2)Vbaで制限時間付き英単語入力教材を作りました。  生徒が制限時間を設定し、スタートボタンを押すと作業を開始でき、英単語が表示され、同じ単語を入力セルに入力、確定すると次の英単語を表示する。以下残り時間が0になるまで作業する。入力したタイミングで残り時間を参照し、0以下になっていれば作業を終了させて、入力数と正解数を記録する。 これは授業で使っています。特に問題はないのですが、残り時間を刻々と表示するタイマーではないので緊迫感に欠けます。 (2)の中で(1)を実現しようと努力はしたのですが、うまくできませんでした。 (3)VisualBasicでタイマーを作りました。 「日経ソフトウエア」2015年8月号の記載のコードを入力しただけですが。 現在は次のようなことができれば、うまくいくのではないかと思い、その方法を探しています。 「自作タイマーとExcelを起動する。タイマーはあるタイミングで共通領域?(ファイル、メモリー、変数?)に残り時間を書き込む。Excel Vbaからあるタイミングで共通領域の値を参照する。」  全く手探り状態で、つぎのことを調べました。 (4)MSDNで「.NET Framework でのパイプ操作」 「方法: ローカルのプロセス間通信で匿名パイプを使用する」 「方法: ネットワークのプロセス間通信で名前付きパイプを使用する」 に記載されたコードをコピーし、働きを確認できたのですが、それをどう利用したらいいのか今のところよく分かりません。(言語はC#、環境はVisual Studio 2015 Community、OSはWindows 10) 基本的な知識が不足していて、どこから手をつけたらいいのか全く分からない状況です。 ともかく今は、プロセス間通信について調べています。またC#について勉強しています。「独習 C# 第3版」第7章まできました。サンプルコードを入力して確認しているだけですが。  よろしくお願いします。

専門家に質問してみよう