時計マクロを作ってみる
前回は マクロの導入 に触れていただきました。今回は、ちょっと感動する 「時計マクロ」 を作りましょう。
Excel のセルに、リアルタイムで現在時刻を表示する ── つまり、セルが「1秒ごとに自動で更新される時計」になります。
これ、コピペするだけで完成します。所要時間 5分。
「Excel ってこんなことまでできるんだ」と思っていただけたら、嬉しいです。
レッスンファイル 099 はExcelマクロファイルです
最初に1点だけ注意です。このレッスンファイルは Excelマクロファイル です。
おそらく、そのまま開こうとすると、赤い警告バーが表示されます。

これが出ると、マクロは完全に使えない状態となります。そのため、Excelマクロファイルのプロパティを開いてください。
Windowsのエクスプローラ上で lesson099-practice.xlsm ファイルを右クリックして「プロパティ」です。

セキュリティの項目に「許可する」にチェックを入れていただければ、Excelマクロが使えるようになります(黄色の警告バーは出てくると思うので、初回は Excelマクロ を有効にしてください)。
完成形のイメージ
ここからは、新規ブックで作成していく流れで説明していきます。
セル B2 に、
2026/05/25 10:30:42
のように、現在時刻が表示されます。そのまま放置していると、1秒ごとに数字が更新されていく。
ストップウォッチや時計を別アプリで開かなくても、Excel 単体で時計 が動きます。会議用の進行表に組み込んだり、勉強の進捗管理に使ったり、応用は色々できます。

マクロのコード
前回 098 で学んだ 「開発タブ → Visual Basic → 標準モジュール」 までは同じ流れです。
Module1 の白い画面に、次のコードを そのままコピペ してください。
' ================================
' リアルタイム時計(秒更新)
' ================================
Dim isRunning As Boolean ' 動作フラグ
' ▼ 時計をスタートする
Sub StartClock()
isRunning = True
Call UpdateClock
End Sub
' ▼ 時計をストップする
Sub StopClock()
isRunning = False
End Sub
' ▼ 時刻を更新して、1秒後に自分自身を再呼び出し
Sub UpdateClock()
If Not isRunning Then Exit Sub
' ↓ ここのセル番地はお好みで変更してください
Range("B2").Value = Format(Now, "yyyy/mm/dd hh:mm:ss")
' 1秒後に再実行を予約
Application.OnTime Now + TimeValue("00:00:01"), "UpdateClock"
End Sub
長く見えますが、コードの 本体は3つの Sub だけ です。
ステップ1: StartClock :時計をスタート
ステップ2: StopClock :時計をストップ
ステップ3: UpdateClock :時刻を更新する本体(1秒ごとに自分を呼び出す)
ボタンを2つ配置する
前回と同じ手順で、シートにボタンを2つ配置します。
ステップ1: 開発タブ → 挿入 → ボタン → ドラッグで配置
ステップ2: 「マクロの登録」ダイアログで 「StartClock」 を選択 → OK
ステップ3: ボタンの上で右クリック →「テキストの編集」で 「スタート」 に変更
同じ手順で、もう1つボタンを作り、「StopClock」 を紐付けて、ボタン名を 「ストップ」 にします。

動きを試してみる
「スタート」ボタンをクリックしてみてください。
セル B2 に 現在の日時 が表示され、1秒ごとに数字が更新 されていきます。秒の部分が「02, 03, 04...」と動いていくのが分かるはずです。
「ストップ」ボタンを押すと、更新が止まります。再度スタートを押せば、また動き出します。



ここまで来たら、Excel が時計として動いている という、ちょっと不思議な感覚を味わってください。
コードを少し解説
3つの Sub が、お互いを呼び合って動いているのがポイントです。
StartClock
isRunning = True ' 動作フラグをONに
Call UpdateClock ' UpdateClock を呼び出す
「動かしますよ」のフラグを立てて、本体の UpdateClock を呼び出します。
UpdateClock(本体)
If Not isRunning Then Exit Sub ' フラグがOFFなら終了
Range("B2").Value = Format(Now, "yyyy/mm/dd hh:mm:ss") ' 現在時刻を入れる
Application.OnTime Now + TimeValue("00:00:01"), "UpdateClock" ' 1秒後に自分を再呼び出し
ここがマクロの面白いところ。自分自身を「1秒後に呼ぶ」 という指示を入れることで、永遠に動き続ける時計になります。
StopClock
isRunning = False ' 動作フラグをOFFに
フラグを OFF にすると、次の UpdateClock が「フラグOFFだから終了」と判断して止まります。
ここに登場する「シリアル値」
Now という関数は、現在の日時を返す Excel の組み込み関数です。実はこの Now、レッスン005で学んだ シリアル値 で動いています。
Now の中身は、たとえば「46164.4380...」のような数字。
- 整数部分(46164):日付(2026/5/25)
- 小数部分(0.4380...):時刻(10時30分42秒)
Format(Now, "yyyy/mm/dd hh:mm:ss") で、このシリアル値を 人間が読める形式の文字列 に変換しています。
レッスン005で学んだ「日付は数字」「シリアル値」の話が、こんなところで活きてくる ── これが Excel の面白さです。
マクロが動いている間の注意
時計マクロが動いている間、Excel に他の作業をすると、1秒ごとに動作が一瞬中断 されることがあります。
実用というよりは「こんなこともできるんだ」という体験用のマクロです。実際に時計を見るなら、PC の時計を見るのが一番早い、というオチもあります。
ただ、「Application.OnTime で自分を呼び出す」という構造は、
- 定期的にデータを更新する
- 一定時間ごとにファイルをチェックする
- バックアップを定期実行する
など、実務で使える応用範囲がたくさんある 構造です。今回の時計は、その入り口体験です。
まとめ
- コピペするだけで動く 時計マクロ
- 3つの Sub(StartClock / StopClock / UpdateClock)が協力して動く
Application.OnTimeで「1秒後に自分を呼び出す」のがポイントNowの中身は シリアル値(レッスン005と同じ仕組み)- 実用というより「Excel ってここまでできるんだ」体験
次回はいよいよ 100Excel完走 ! ここまで本当にお疲れさまでした。最後はちょっと特別な話をさせてください。
ショートカット
- Visual Basic Editor を開く:[Alt] + [F11]
- マクロのダイアログを開く:[Alt] + [F8]