• ベストアンサー

VBAでのストップウォッチの質問です

今のコードを載せます Sub test_StopwatchCell() If did Then kStopwatch Else kStopwatch Range("a1") End If End Sub 上のコードはエクセルワークシートにフォームのボタンを配置して、test_StopwatchCell 関数を登録し、クリックで測定開始し、もう一度クリックで測定停止するマクロですが、一時停止のボタンを新たに作りたいのですが、どうしたらいいのか教えて下さい。お願いします。

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

No.2です。 そうですね・・・ 「開始/停止(トグル)」と書いてあったので、てっきりその時間から始めると思ってしまいました。 勝手にプログラムに手を加えるのは良くないかもしれませんが・・・ たとえば標準モジュールの Sub kStopwatch(Optional obj As Object) の中の8行目位の >dstart = timeGetTime が、 dstart = timeGetTime - obj.Value * 86400000 '86400000=60*60*24*1000 だったら、現在の時間から始めるかもしれません。

himiru21
質問者

お礼

教えて下さったとうり変更してみたらできました! まさに知りたかったのはこのことです。親切に教えて下さって本当に助かりました。VBを勉強している最中で分からないことだらけですが、これから少しずつ上達していきたいと思ってます。 とても役に立ちました。有難うございました。

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

その他の回答 (2)

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

kStopwatch が >http://homepage2.nifty.com/kmado/ke_m8.htm のストップウォッチの事なら、2つのコマンドボタンを用意して、以下ではどうでしょうか? 本物のストップウォッチもこんな風なボタン配置ではなかったでしょうか? 'スタート・一時停止ボタン Private Sub CommandButton1_Click() kStopwatch Range("A1") End Sub 'クリアボタン Private Sub CommandButton2_Click() kStopwatch 'カウント中の場合でも停止 Range("A1").Value = 0 End Sub p.s. プログラムの先頭に 'kStopwatch関数 ストップウォッチの開始/停止(トグル) とありました。 実行中に呼ばれる事で一時停止になるようです。

himiru21
質問者

補足

>kStopwatch が ​http://homepage2.nifty.com/kmado/ke_m8.htm​ のストップウォッチの事なら・・・・ まさにそのことです。 ご回答ありがとうございます。 これで一時停止できるようにはなったのですが、再スタート(スタート・一時停止ボタンを押す)しようとすると、カウントがまた0からになってしまうので困っています。一時停止し、もう一度押すことでその続きからカウントするようにするにはどうしたらいいのでしょうか。ぶしつけですみませんが、ご指導お願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

kStopwatch1の中の時間を数えている部分に フラグを判定する部分または セルまたはさらに別のボタンの値を読み取るかする 部分を追加して、 その値が一時停止させたい値なら時刻カウントを しないようにすればいいと思います。  引数としてRange("a1")のように値を利用できる みたいですから、A2などのセルの値を利用するのが 手っ取り早そうですが・・・。

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

関連するQ&A

  • VBAでのオートタブ?

    エクセルを使って、VBEでのマクロの編集をしています。 その際に、改行した時のオートタブ出来ずに困っています。(正式名称が分かりません) C++でプログラムを書くと、このように ifの範囲では分かりやすくオートタブしてくれるのに      If Range("B4") = "" Then      Exit Sub      End If   Else エクセルのエディターで同じ文章を書くと If Range("B4") = "" Then Exit Sub End If Else となってしまい、非常に読みづらいです。 どのように設定すればオートタブ?してくれるのでしょうか? どなたか教えてください・・・。

  • エクセルVBAマクロのオプションボタンについて

    オプションボタンのマクロに関して教えて下さい。 マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。 「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタンAが押されている場合とBが押されている場合で、処理を変えたいのですが、そのオプションボタンの値をどうやっても拾えません。 色々検索した結果、以下のマクロでできる気がしたのですが、駄目でした。 Private Sub OptionButton1_Click() オプション1 = True End Sub Private Sub OptionButton2_Click() オプション2 = True End Sub Sub オプションボタン() If オプション1 = True Then Range("a1") = 1 ElseIf オプション2 = True Then Range("a1") = 2 Else Range("a1") = 0 End If End Sub 作ったオプションボタンを右クリックしてマクロ登録を選ぶと、「オプション1_Click」となっているので、「OptionButton1_Click」を「オプション1_Click」に変えてみたのですが、やっぱり駄目でした。 ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。 ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。

  • シートのイベント VBA

    シートをクリックしたらシートをクリアしたいのですが クリックするセルがA1の場合は、マクロを実行させたくないのですが 下記のコードだとエラーになってしまいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Target.Range = Range("a1") Then Cells.Clear End If End Sub ”Range("a1")でなければ、Cells.Clearする” にはどうすればいいですか?

  • 印刷後のVBAの実行 (2)

    Private Sub Workbook_BeforePrint(Cancel As Boolean)   If ActiveSheet.Name = "Sheet1" Then     If Range("D6").Value = "" Then       Cancel = True       MsgBox ("名前を入力してください")       Range("D6").Select       Exit Sub     End If   Else     If ActiveSheet.Name = "Sheet2" Then       If Range("C11").Value = "" Then         Cancel = True         MsgBox ("受付時間を入力してください")         Range("C11").Select         Exit Sub       End If     Else              Exit Sub     End If   End If   ActiveSheet.Range("A70:Y70").Copy   If Worksheets("Sheet3").Range("A1").Value = "" Then     Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues   Else     Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _       Paste:=xlPasteValues   End If   Application.CutCopyMode = False   ActiveSheet.Range("A1").Select End Sub 先日、上記のコードを回答者の方から教えてもらい、とても助かっていますが sheet1のD5に「不要」という文字が入っていた場合、 sheet3への貼り付け(23~30行目の作業)をキャンセルして、最後にsheet1のA1を選択するようにはどの様にしたらいいでしょうか?

  • エクセル2010のvbaについて

    押されたコマンドボタンの名前を取得したいです (調べてみましたがエラーになり取得できませんでした) 後コマンドボタンがたくさんあり、コードも長く とても邪魔なので省略したいのですができますか? (左クリックと右クリックで違う処理をした後       MouseDown コマンドボタンの名前で少し処理を変えるコードです) MouseUp (下のコードのような感じです) 回答お願いします Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) Select Case Button Case 1 Range("A1") = 1 Case 2 Range("A1") = 2 End Select End Sub Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) If (コマンドボタンの名前を取得) = "aaa" Then Range("A1") = Range("A1") + 1 Else Range("A1") = Range("A1") - 1 End If End Sub

  • VBAで2つのプロシージャーをつなげるには

    VBAでSub ~ End Subまで書き終えて、一つのプロシジャーを完成させたあと、 その下に、もう一つのプロシジャーを作り、連続してマクロを動かしたいと思ってます。 例に例えると、 Sub test() Dim MyRange As Range Set MyRange = Columns("c").Find(What:="﨑") If MyRange Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyRange.Font.ColorIndex = 3  End If Dim MyCells As Range Set MyCells = Columns("c").Find(What:="髙") If MyCells Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyCells.Font.ColorIndex = 3 End If End Sub      Sub sample()    Dim i As Long   For i = 1 To Cells(Rows.Count, "I").End(xlUp).Row    If InStr(1, Cells(i, "I"), "VBA", vbTextCompare) > 0 Then   Cells(i, "M") = "YES"   End If   Next   End Sub 上記のような2つのマクロをつなげて1つの実家行えるようにするにはどうしたらよろしいのでしょうか。 どうしても実行時に上のマクロと下のマクロが別々に表示されてしまします。 (ちなみに、上側のマクロは環境依存文字を探すマクロ、下側はVBAの文字を見つけ出すマクロです。) どなたかご存知の方いらっしゃいましたら、教えて頂けないでしょうか。 よろしくお願い致します。

  • 印刷後のVBAの実行 (3)

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then If Range("D6").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D6").Select Exit Sub End If Else If ActiveSheet.Name = "Sheet2" Then If Range("C11").Value = "" Then Cancel = True MsgBox ("受付時間を入力してください") Range("C11").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("Sheet1").Range("D5") = "不要" Then GoTo P1 ActiveSheet.Range("A70:Y70").Copy If Worksheets("Sheet3").Range("A1").Value = "" Then Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues Else Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub sheet1のD5に「不要」と入っていたら 24~33行目の作業がキャンセルになりますが sheet2のD5にも「不要」と入っていたら、同じ様にキャンセルできる様に出来ますでしょうか? ご回答お願いします

  • VBA マクロの2つのカウントダウンタイマーの件

    VBAでマクロ作成中ですが、標準モジュール間の変数のやり取りがよくわかりません。 教えていただけないでしょうか? Sub 指定時刻にマクロを実行する1()    mywait = 1    指定時刻 = Now + TimeSerial(0,0,mywait)    IF MacroStop = False Then      Application.OnTime 指定時刻,”指定時刻にマクロを実行する1”    Call やりたいこと1    Else MacroStop = False End End If End Sub Sub やりたいこと1    C1= C1+1    ZAN1 =TB1-C1   ・・・ End Sub Sub マクロ停止1()     MacroStop = True     Range(”A1”).ClearContents     ... End Sub と Sub 指定時刻にマクロを実行する2()    mywait = 1    指定時刻 = Now + TimeSerial(0,0,mywait)    IF MacroStop = False Then      Application.OnTime 指定時刻,”指定時刻にマクロを実行する2”    Call やりたいこと2    Else MacroStop = False End End If End Sub Sub やりたいこと2    C2= C2+1    ZAN2 =TB2-C2  ・・・ End Sub Sub マクロ停止2()     MacroStop = True     Range(”A2”).ClearContents     ... End Sub という標準モジュールを2つ作成し、一方のマクロ(C1側)を止めると、もう一方のマクロ(C2側)の変数(TB2)がIntegerからEmptyに変わってしまい、ZAN2がマイナスカウントしてしまいます。 TB1はInteger型のままClearContentsされ0になり、C1側のマクロは正常に止まっています。C2側は、継続して正常にカウントダウンさせたいのですが。。。 マクロの初心者です どなたかよろしくお願いします。 

  • VBAのボタン操作について。

    For i=0 to 3 with Range("A" & (i+1)) with ActiveSheet.Buttons.Add(.Left,.Top,.Width,.Height) .caption="テストボタン" .OnAction="テストアクション" End with End wirh Sub テストアクション() MsgBox "あなたがクリックしたボタンは上から○番目のボタンです。" End sub 上記マクロを実行すると、セルA1,A2,A3にテストボタンが配置されます。 3つのボタンのどれかをクリックしたとき、テストアクションが実行されますが、 ○番目の○を求めるにはどうすればよいのでしょうか?

  • エクセル VBA Worksheet_Changeとコピー&ペースト

    いつも皆様には大変お世話になっております。 早速の質問ですが Worksheet_Changeを使ってマクロを組んでいるのと フォームを使ってマクロを組んでいます フォームのほうからのマクロで Sheet1のセルをコピーしてSheet2のセルに貼り付けをしたいのですが、 貼り付けができません。 フォームのほうからのマクロじゃなく手動でコピー&ペーストも利きません。コピーはできるのですがSheet2に変えたところ貼り付けができなくなってしまいます。 Worksheet_Changeのマクロを消すと動きました。どうにかならないでしょうか? ちなみにWorksheet_Changeの中のマクロは Private Sub Worksheet_Change(ByVal Target As Range) If Range("J48") = Range("J68") Then Range("J48").Interior.ColorIndex = xlColorIndexNone Else Range("j48").Interior.ColorIndex = 26 End If If Range("V48") = Range("V68") Then Range("V48").Interior.ColorIndex = xlColorIndexNone Else Range("V48").Interior.ColorIndex = 26 End If End Sub となっています。 何かいい解決法がありましたらご教授のほどよろしくお願いいたします。