Excelでタイマーを一時停止する方法

このQ&Aのポイント
  • Excelでタイマーを作成し、一時停止する方法を知りたいです。
  • 一時停止機能を追加したいが、コーディングが難しいです。
  • タイマーを一時停止するためのコードを教えてください。
回答を見る
  • ベストアンサー

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

  • che8
  • お礼率7% (20/282)

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

  • ベストアンサー
回答No.2

#1さんのように突っぱねることが、本来は親切なのだと思います。ただ、掲示板というのは、締め切りはあっても、書かれたものは、時間というものが存在しない世界(一期一会)ですから、回答をせざるを得ないのは、ご容赦願います。 以下は、ある程度マクロが書ける人なら、考えつくはずです。 本来は、マクロの実行中に、割り込みが利かないのですが、なぜ可能なのか分かりますか? それが分かりさえすれば、割り込み方法も思いつきます。 '// Dim blnSw As Boolean 'スイッチ Private Sub CommandButton1_Click()  Dim EndTime As Double  Dim PassTime As Double  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   If blnSw Then blnSw = False: Exit Sub  Loop Until EndTime - PassTime <= 0  Beep  MsgBox "時間です" End Sub Private Sub CommandButton2_Click() '途中で止める  blnSw = True End Sub

関連するQ&A

  • エクセルのマクロでLoopを使うと応答なしになり…

    エクセル2010でタイマーを作って作動させるとかならず応答なしになります。Sleepも使ったのですが応答なしになりました。そうなった理由をできれば教えてください。よろしくお願いします マクロ Sub macro() Dim EndTime As Long Dim PassTime As Long EndTime = Timer + Range("c6").Value * 60 + Range("E6").Value Do PassTime = Timer Range("c6").Value = (EndTime - PassTime) \ 60 '分 Range("e6").Value = (EndTime - PassTime) Mod 60 '秒 Loop Until EndTime - PassTime <= 0 Beep MsgBox "時間だよ" End Sub

  • ひとつのボタンでタイマーを動かしたり止めたりしたいのですが

    ひとつのボタンでタイマーを動かしたり止めたりしたいのですが こんにちは 趣味でjavascriptをしているものです 以下のサイトから、テトリスのコードをダウンロードしたのですが、 http://java.aimary.com/ このjavascriptの動くhtml内に  gameInterval(ゲーム内のタイマー変数)を 使って、ポーズボタンのようなものを追加したいと思ったのですが、 以下のコードのようにすると、いったん停止したとおもったら、 再びタイマーが呼び出され、何度も押すと、タイムインターバルが 短くなっていきました。 //headに追加 function clear_timer() { var obj = document.getElementById("timer_control"); clearInterval( gameInterval ); obj.detachEvent('onclick', clear_timer); obj.attachEvent('onclick', set_timer ); } function set_timer() { var obj = document.getElementById("timer_control"); obj.detachEvent('onclick', set_timer ); obj.detachEvent('onclick', clear_timer ); gameInterval = window.setInterval("Handle_Interval()", (maxspeed-speed+1)*60); obj.attachEvent( 'onclick', clear_timer ); } //bodyに追加 <div style='position:absolute; left:520px; top:100px;'> <form name='Form1'> <input type="button" id="timer_control" value="pause" onclick="JavaScript:clear_timer();"> </form> </div> おそれいりますが、どなたか、正しい記述の仕方を 教えていただけないでしょうか? よろしくおねがいします。

  • VBAで指定時刻まで一時停止するコード

    VBA初心者です。 業務で使用するため、VBAで指定時刻まで一時停止するコードを作りたいのですが、うまくいきません。 設定したい条件は (1)当日の午前9時から実行 (2)記述しているコードの実行が終了したら、当日の午後6時まで一時停止 (このとき他の業務でExcelを使用するので、Excelの動作を止めないためにDoEventsと記述してOSに制御を移しています) (3)当日午後6時になったら、コードの実行を再開する 以上です。 今のところ、午後6時まで動作が停止せず、すぐに午後6時以降に実行したいコードが実行されてしまいます。 どういうコードを記述すればいいでしょうか?教えてください。 ------------------------------------------------------------------------------------------------------------------ ~(中略)~ Dim PauseTime As Single Dim Start As Variant Dim Finish As Date Dim TotalTime As Variant Start = Now() Do PauseTime = Start + TimeValue("08:59:20") DoEvents Loop While Now() < Finish Finish = TimeValue("18:00:03") ~(中略)~ ------------------------------------------------------------------------------------------------------------------

  • VBA 制限時間を、一時停止させたい

    Excel VBAでの質問です。Excel2007使用です。 ユーザーフォームに制限時間と、制限時間を一時停止させるコマンドボタンを作りたいです。制限時間(60分)は、下ので実行できたのですが、一時停止ができるか、わかりません。 Private Sub 制限時間_Click() Dim myTime As Date Dim myLImit As Date myLImit = Now + TimeValue("1:00:00") Do While myLImit > Now DoEvents myTime = myLImit - Now 分表示.Caption = Minute(myTime) & "分" 秒表示.Caption = Second(myTime) & "秒" Loop msgbox "終了です。" Unload Me End Sub できれば、ボタンを押すとmsgbox"一時停止"を表示させ、表示させている間は、制限時間を一時停止させたいです。制限時間、一時停止ができれば、違うコードでもかまいません。 どうぞよろしくお願いします。

  • エクセルVBAを教えて下さい

    エクセルの表で -AB C D E F 1年月--1801 2------ 3------ 4------ (-)は空欄でセルE1=18、F1=1とします。 コントロールボックスをつかって Private Sub Command登録_Click() Dim d1 As Long Dim d2 As Long Dim ret As Variant Dim FindValue As String Dim TotalAddress As String If Range("E1").Value = "" Or Range("F1").Value = "" Then MsgBox "該当する場所にデータが入っていません。", vbCritical Exit Sub End If d1 = Range("A65536").End(xlUp).Offset(1).Row d2 = Range("B65536").End(xlUp).Offset(1).Row FindValue = """" & Range("E1").Value & Range("F1").Value & """" TotalAddress = Range("A1").Resize(d1).Address & "&" & Range("B1").Resize(d1).Address ret = Evaluate("MATCH(" & FindValue & "," & TotalAddress & ",0)") If IsError(ret) Then Cells(d1, 1) = Range("E1").Value Cells(d2, 2) = Range("F1").Value Else MsgBox "既に同じ組み合せがあります。", vbInformation End If End Sub というものを作ったのですが、E1=18、F1=1及びコマンドボタンを別シートに作成し、上記の表への登録をできるようにしたいのですが、なにかいい方法はありませんか?

  • グラフを連続的に高速で動かしたいです

    お世話になります。 しょうもない質問ですんで、お暇な方お願いします。 添付画像にあるようなグラフがあり、画面内のボタンを押すと セルB3、C3の値が0から始まり、1きざみで1000になるまで繰り返します。 Sub ボタン1_Click() Dim i As Long Dim s, e As Date s = Now() Range("b3").Value = 0 Range("c3").Value = 0 For i = 1 To 1000 Range("b3").Value = Range("b3").Value + 1 Range("c3").Value = Range("c3").Value + 1 DoEvents Next e = Now() MsgBox CDate(e - s) End Sub このコードですと1000まで繰り返すまでの時間が私のPCでは34秒程掛っています。 コードの変更のみでこれを3秒ぐらいにできないでしょうか? なお、DoEventsは入れてないとグラフの更新が表示されませんでした。 よろしくお願いします。

  • エクセル2013 既存コードを用いて修正

    Clean関数をマクロに取り込みたいのですが 下記コードの Trim部分をCleanにしただけではダメでした。 どのようなコードを組んだら宜しいでしょうか? ご教示ください。 Sub Clean() Dim rng As Range For Each rng In Selection rng.Value = Trim(rng.Value) '←TrimをCleanにしただけではダメでした Next rng End Sub 実際は AからL列まで入力されています。 D列の最終入力セルを取得してB,E,F列をCleanにしたいです。 (AからLでも構いません) ブックはパスワードで保護されています。 データは8行目から入力されています。 (7行目は見出し)

  • 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点です。よろしくお願いします。

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

    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をコメントにすると、デバックでは延々ループを続け、実行するとフリーズしてしまいます。 そもそもタイマーの使い方が間違っているのでしょうか? 教えてください。よろしくお願いします。

  • エクセルのVBAコードにつてい

    以下のコードについて、その内容をまだ自分の知識では理解できず困っておりまして、アドバイスいただければと思いまして書き込みました。 『コード』 Sub Test() Dim Lc As Integer Dim Ct As Integer Dim MyR As Range Dim C As Range Dim D As Range Lc = Range("A1").End(xlToRight).Column - 2 For Each C In Range("B2", Range("B65536").End(xlUp)) Ct = WorksheetFunction.Count(C.Offset(, 1).Resize(, Lc)) If Ct > 0 Then Set MyR = C.Offset(, 1).Resize(, Lc).SpecialCells(2, 1) For Each D In MyR With Sheets("Sheet2").Range("A65536").End(xlUp) .Offset(1).Value = C.Value .Offset(1, 1).Value = Cells(1, D.Column).Value End With Next Set MyR = Nothing End If Next With Sheets("Sheet2") .Columns("A:B").AutoFit .Activate End With End Sub 『質問』 1.「Lc = Range("A1").End(xlToRight).Column - 2」の部分の解釈は「A1から右方向に一番最後のセルまでを範囲指定し、その一番右のセルの列番号を取得する」変数という解釈でいいのか 2.「Ct = WorksheetFunction.Count(C.Offset(, 1).Resize(, Lc))」の部分の変数はどういった値の整数を取得する変数なのか 以上2点についてアドバイスいただけると幸いです。

専門家に質問してみよう