【VBA】ストップウォッチの作り方とコードを初心者向けに解説!
Excelを使用していると、データ入力の訓練や課題の練習など、ストップウォッチ機能があったら便利・・・ということも多いでしょう。
実は私は普段パソコン講座なども行っていて、ワークにストップウォッチ機能があるととても便利と思うことがよくあります。
そこでこの記事ではExcelのストップウォッチ機能について、VBAのコードをコピペですぐに使えるよう、状況別に合わせてコードを作りました。
内容は画像付きで解説しますので、一つずつ見ていきましょう。
目次
【基礎編】VBAを使ったストップウォッチ機能の挿入方法

最初は簡単なコードとして、上の画像のようなストップウォッチを作ります。
まずは以下のようにExcelに文字を入力します。

次に、Alt+11でVBAの入力画面を開き、標準モジュールを挿入します。

次に、以下のコードをコピペして貼り付けましょう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Public StartTime As Date Sub StartTimer() StartTime = Now Range("A4").Value = StartTime End Sub Sub StopTimer() Dim EndTime As Date EndTime = Now Range("B4").Value = EndTime Range("C4").Value = EndTime - StartTime Range("C4").NumberFormat = "hh:mm:ss" End Sub |

ボタン挿入

マクロを動かしやすいように、ボタンを2つ挿入します。もしボタンの挿入方法が分からない場合はExcelでボタンを使ったマクロの簡単な作り方の記事を見てみましょう。
スタートにはStartTimerのマクロを登録し、ストップにはStopTimerのマクロを登録します。
実際にマクロを動かしてみると、以下のようになります。

ストップウォッチのコードの意味を解説
■ Public StartTime As Date
すべてのモジュール(プログラムのまとまり)から使える、『StartTime』という名前の日付・時刻型の変数を宣言する」という意味
■ Sub StartTimer()
スタートボタンに割り当てるマクロです。
● StartTime = Now
Now は「現在の日時」を返す関数
これを StartTime に保存しておきます
ストップ時に差を取るための基準になります
● Range(“A4”).Value = StartTime
スタートした時刻を A4 に表示します
Excelのセルに時刻が記録されるので、ログとしても使えます
■ Sub StopTimer()
ストップボタンに割り当てるマクロです。
● Dim EndTime As Date
ストップした時刻を入れる変数を用意します
● EndTime = Now
ストップボタンを押した瞬間の時刻を取得します
● Range(“B4”).Value = EndTime
ストップ時刻を B4 に表示します
● Range(“C4”).Value = EndTime – StartTime
経過時間は「ストップ – スタート」で求められます
Excelでは時刻は「1日=1」として扱われるため、差を取るだけでOK
● Range(“C4”).NumberFormat = “hh:mm:ss”
経過時間を「時:分:秒」で見やすく表示します
これを設定しないと、Excelの内部値(0.000123…のような小数)で表示されてしまいます。
日付を非表示にして秒を表示する方法

上の画像のように、スタートとストップの日付を非表示にして秒を出す方法を紹介します。その場合、コードを以下に差し替えます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Public StartTime As Date Sub StartTimer() StartTime = Now Range("A4").Value = StartTime Range("A4").NumberFormat = "hh:mm:ss" End Sub Sub StopTimer() Dim EndTime As Date EndTime = Now Range("B4").Value = EndTime Range("B4").NumberFormat = "hh:mm:ss" Range("C4").Value = EndTime - StartTime Range("C4").NumberFormat = "hh:mm:ss" End Sub |
このようになります。

秒の表示をするコード解説
Range(“A4”).NumberFormat = “hh:mm:ss”のコードを入れることで、表示形式を設定することができます。hhは時、mmは分、ssは秒を指しています。
リセットボタンの設定
次はリセットボタンを設置する方法を紹介します。
以下のコードを追記しましょう。
|
1 2 3 |
Sub ResetTimer() Range("A4:C4").ClearContents End Sub |

コードの意味は以下となります。
■ Sub ResetTimer()
リセットボタンに割り当てるマクロです
「ストップウォッチの値を初期化する処理」をまとめています
■ Range(“A4:C4”).ClearContents
A4 から C4 までの範囲をまとめてクリア
ClearContents は「値だけ消す」命令
→ セルの書式(時刻表示など)は残る
そのため、再スタートしても時刻表示が崩れません
ストップウォッチのスタート直後に一度リセットする方法
次はストップウォッチのスタートを押したら自動でスタートの時間がリセットされるようにします。
以下のコードを追記します。
|
1 2 |
' まずリセット ResetTimer |

ストップウォッチが続いているときの秒数をリアルタイム表示する方法

次は秒数をリアルタイムする方法を紹介します。
今度は最終的な完成のコードを紹介しますので、全てコードを差し替えましょう。
以下となります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Public StartTime As Date Public Running As Boolean Sub StartTimer() ' リセットして開始 ResetTimer ' スタート時刻を記録 StartTime = Now Range("A4").Value = StartTime Range("A4").NumberFormat = "hh:mm:ss" ' 動作中フラグを立てる Running = True ' 経過時間のリアルタイム更新開始 UpdateTimer End Sub Sub UpdateTimer() ' 停止中なら更新しない If Running = False Then Exit Sub ' 経過時間を表示 Range("C4").Value = Now - StartTime Range("C4").NumberFormat = "hh:mm:ss" ' 次の更新を予約(1秒ごと) Application.OnTime Now + TimeValue("00:00:01"), "UpdateTimer" End Sub Sub StopTimer() ' 動作停止 Running = False ' ストップ時刻を記録 Range("B4").Value = Now Range("B4").NumberFormat = "hh:mm:ss" End Sub Sub ResetTimer() ' 動作停止 Running = False ' A4〜C4 をクリア Range("A4:C4").ClearContents End Sub |

ストップウォッチ完成版のコード解説
コードを解説します。
■ C4 は UpdateTimer でリアルタイム更新
|
1 |
Range("C4").Value = Now - StartTime |
上記は秒数が動き続けるというコードです。
■ Application.OnTime で1秒ごとに更新
|
1 |
Application.OnTime Now + TimeValue("00:00:01"), "UpdateTimer" |
Excel が固まらないように、
1秒後に再度 UpdateTimer を実行する予約を入れている。
■ StopTimer で更新を止める
|
1 |
Running = False |
これがないと、止めても UpdateTimer が動き続けてしまう。