結論:NOW関数は「再計算されたときだけ」更新される。時計にはならない
Excel のセルに =NOW() と入れても秒針のように時刻が進まないのは、不具合ではなく仕様です。Microsoft 公式は「NOW 関数の計算結果は、ワークシートが再計算されたとき、またはこの関数を記述したマクロが実行されたときにだけ更新されます。時間の経過と共に自動的に計算結果が更新されることはありません」と明記しています(Microsoft公式:NOW 関数)。つまり NOW() は「時計」ではなく「最後に再計算した瞬間のスナップショット」です。
ですから対処は2つに分かれます。更新したいなら、計算方法が「手動」になっていないかを確認し、必要なら F9 で再計算する。更新されたくない(勝手に変わって困る)なら、そもそも関数を使わず Ctrl+;(現在の日付)/Ctrl+Shift+:(現在の時刻)で固定値として打ち込む。そして「1秒ごとに動く時計」が本当に必要なら、標準機能では実現できず VBA の Application.OnTime が要ります。以下、それぞれを Microsoft 公式で裏を取りながら順に説明します。
やりたいことで選ぶ|Excelで現在時刻を扱う5つの手段くらべ
「現在時刻を出したい」と一口に言っても、実務では目的がまったく違います。まず自分がどれに当てはまるかを決めてから手段を選んでください。手段を間違えると、あとで「記録が全部今日の日付に書き換わっていた」といった事故になります。
やりたいこと | 手段 | 更新のタイミング | 向き・注意 |
|---|---|---|---|
開いた時点の日時が出ればいい | =NOW() / =TODAY() | ブックを開いたとき・再計算のたび | 標準機能だけで完結。ただし過去の記録用には使えない |
入力した時刻を残したい | Ctrl+;(日付)/Ctrl+Shift+:(時刻) | 更新されない(固定値) | 打刻・記録はこれが正解。手で押す必要がある |
行を編集したら自動で打刻したい | 循環参照+反復計算 | そのシートが再計算されるたびに判定 | マクロ不要だが、反復計算はブック全体の設定に効く |
入力を検知して確実に打刻したい | VBA の Worksheet_Change | セルが変更された瞬間 | .xlsm 必須。ブラウザーでは動かない |
1秒・1分ごとに動く時計がほしい | VBA の Application.OnTime | 指定した間隔 | .xlsm 必須。ブックを閉じると止まる。共有先で動かない |
上の3つは標準機能だけで足ります。下の2つはマクロ有効ブック(.xlsm)になり、配布先の環境に左右されます。他人に配るファイルなら、まず上の3つで済ませられないかを検討してください。
NOW関数・TODAY関数と「揮発性関数」の正体
NOW と TODAY は Excel の内部で揮発性関数(volatile function)に分類されています。Microsoft Learn は揮発性関数を「その引数に変更がなくても、ある瞬間から次の瞬間まで値が同じであると仮定することができない関数」と定義し、NOW・TODAY・RANDBETWEEN・OFFSET・INDIRECT などを揮発性として挙げています(Microsoft Learn:Excel の再計算)。
誤解されやすいのですが、揮発性=「勝手に動き続ける」ではありません。「再計算が起きたら必ず計算し直される」というだけです。再計算が起きなければ値は止まり、逆に何気ない操作でも再計算が起きれば一斉に書き換わります。
再計算が起きるきっかけと、手で起こす方法
Microsoft Learn は再計算のきっかけとして、新しいデータの入力、行や列の削除・挿入、名前の定義の追加や編集、ワークシート名の変更などを挙げています。つまり「関係ないセルを1つ触っただけ」でも NOW() のセルは全部更新されます。手で再計算を起こしたいときは、次のキーを使い分けます。
- F9:開いているブックのすべてのワークシートを計算する(変更があったセルのみ)
- Shift+F9:作業中のワークシートだけを計算する
- Ctrl+Alt+F9:変更の有無に関係なく、開いているブックのすべてのワークシートを計算する
- Ctrl+Shift+Alt+F9:依存関係を再構築したうえで、すべてのセルの再計算を強制する
「F9 で一部しか直らない」ときは Ctrl+Alt+F9、それでも直らなければ Ctrl+Shift+Alt+F9 の順に試します。キーの意味は Microsoft公式:Excel のキーボード ショートカット に一覧があります。
更新されない最多の原因は「計算方法が手動」になっていること
「NOW() を入れたのにブックを開いても時刻が古いまま」という場合、まず疑うのは計算方法の設定です。Excel には自動・データテーブル以外自動・手動の3つの計算モードがあり、手動になっていると F9 などを押すまで数式が更新されません。大きな集計ブックは動作を軽くするために手動へ切り替えられていることが多く、それを引き継いだファイルで起きがちです。
確認は[数式]タブ →[計算方法の設定]、または[ファイル]→[オプション]→[数式]→[計算方法の設定]で行います。ここが「手動」なら「自動」に戻してください(Microsoft公式:数式の再計算、反復計算、または精度を変更する)。なお TODAY 関数のヘルプにも「TODAY 関数で目的どおりに日付が更新されないときは、ブックまたはワークシートが再計算されるタイミングを制御するための設定を変更することが必要となる場合があります」と書かれています。
それでも直らないときは、セルの表示形式が「文字列」になっていないかも確認してください。表示形式が「標準」であれば、NOW() を入れた時点で日付と時刻の書式に自動で切り替わります。
逆に「勝手に変わる」を止める:入力時点の時刻を固定する3つの方法
実務でより多いのは、じつはこちらの悩みです。作業ログや受付簿に =NOW() を入れると、翌日ファイルを開いた瞬間に過去の記録が全部その日の日時に書き換わります。記録に使うなら最初から固定値で入れるのが正解です。
1. ショートカットキーで打ち込む(いちばん確実)
Microsoft 公式は、更新されない静的な値を入れる方法としてショートカットキーを案内しています。Windows 版では現在の日付が Ctrl+;(セミコロン)、現在の時刻が Ctrl+Shift+:(コロン)です。日付と時刻の両方を同じセルに入れたいときは、Ctrl+; → スペース → Ctrl+Shift+: の順に押します(Microsoft公式:セルに現在の日付と時刻を挿入する)。Mac 版では日付が Ctrl+;、時刻が Command+; です。
2. NOW()を入れてから値として貼り付ける
すでに =NOW() で入れてしまった列は、範囲をコピーして[貼り付けのオプション]→[値]で上書きすれば、その時点の日時で固定できます。数式が消えるので、以降どれだけ再計算が走っても値は動きません。
3. 循環参照+反復計算で自動タイムスタンプにする
「行を入力したら自動で打刻したいが、マクロは使いたくない」場合は、反復計算を有効にしたうえで自分自身を参照する数式を使います。手順は[ファイル]→[オプション]→[数式]→[反復計算を行う]をオンにし、最大反復回数を 1 にします。そのうえで打刻列に =IF(A2="","",IF(B2="",NOW(),B2)) のような式を入れると、A2 に入力があった最初の一度だけ時刻が入り、以後は自分の値を返し続けます。
手軽ですが代償もあります。反復計算はブック全体の設定なので、同じブック内の本来検出したい循環参照エラーまで黙って通してしまいます。また値そのものは固定されるわけではなく、条件が崩れると消えます。証跡として残すことが目的なら、この方法は避けたほうが安全です。確実に検知したいなら VBA の Worksheet_Change イベントで、変更されたセルの隣に Now の値を書き込む形にします。
1秒ごとに動く時計をExcelに作れるか(Application.OnTime)
結論から言うと、Excel の標準機能だけでは動く時計は作れません。数式は「再計算されたときだけ」計算されるので、誰も何も触らなければ更新されないからです。動かすには、一定時間ごとに自分自身を呼び出すマクロが要ります。
そのための VBA が Application.OnTime です。Microsoft Learn は「指定された時刻(特定の日時、または特定の期間の経過後)にプロシージャを実行します」と説明し、Now + TimeValue("00:00:01") のように書けば現在から1秒後に実行できると案内しています(Microsoft Learn:Application.OnTime メソッド (Excel))。時計にするには、セルに時刻を書き込んだうえで自分自身を1秒後に再予約するプロシージャを作ります。停止するときは同じ EarliestTime と Procedure を指定し、Schedule:=False で予約を解除します(解除しないと、ブックを閉じても Excel が再び開こうとします)。
ただし代償は小さくありません。まずファイルをマクロ有効ブック(.xlsm)で保存する必要があり、受け取った人の環境ではマクロが警告でブロックされます。さらに1秒ごとに再計算が走るため、ブックが重くなり、編集中の「元に戻す(Ctrl+Z)」の履歴も消えます。マクロで作り込んだ帳票がその人しかメンテできなくなる問題については、Excelマクロの属人化リスクと脱却の進め方にまとめてあります。
Googleスプレッドシートなら「1分ごと」に自動更新できる
同じ NOW 関数でも、Google スプレッドシートは再計算の頻度を設定で選べます。[ファイル]→[設定]→[計算]を開き、再計算を「変更時」「変更時と毎分」「変更時と毎時」から選ぶ形です。Google 公式の NOW 関数のヘルプにも「NOW 関数を使用し、スプレッドシートの[ファイル]→[スプレッドシートの設定]で再計算の設定を[変更時と毎分]に変更してください」と案内があります(Google公式:NOW)。
逆に言えば 1秒ごとの更新はスプレッドシートでもできません。最短で1分です。それでも「マクロなしで定期更新できる」点は Excel にない強みで、共有前提の管理表なら移行を検討する価値があります。関数の書き味の違いはGoogleスプレッドシートの業務効率化に効く関数10選で比較しています。
実務の落とし穴:打刻をExcelで管理し続ける限界
ここまでの手段はどれも「セルに時刻を書く」までしか面倒を見てくれません。実務で本当に必要なのは、たいてい「誰が・いつ・何を入力したか」のほうです。Excel のセルは誰でも後から上書きでき、しかも上書きした事実が残りません。Ctrl+; で丁寧に打刻していても、翌週その行を直した人がいれば記録としては成立しなくなります。
加えて、揮発性関数を大量に置いたブックは目に見えて重くなります。Microsoft Learn も「揮発性関数に依存しすぎていると、再計算にかかる時間が長くなる可能性があります。使用は控えめにしてください」と明記しています。数千行の管理表に NOW() を敷き詰めるのは、その意味でも筋が悪い設計です。動作が重くなったブックの直し方はエクセルの動作が遅い原因と対処法にまとめています。
日時の記録が業務の証跡として要るなら、入力をフォームやアプリ側で受けて、記録は自動で残す形にするほうが素直です。二重入力そのものをなくす考え方はExcelの二重入力をなくす方法、Excel 作業に AI を組み合わせる話はAI×Excel業務自動化の完全ガイドで扱っています。
私たち Mihata では、こうした「Excel やスプレッドシートで回している管理表を、そのままアプリの入口だけ付けて楽にする」お手伝いもしています。使い慣れた表を捨てずに、入力・打刻・履歴だけを自動にしたい場合はスプシ de 社内アプリもご覧ください。
うまくいかないときのトラブル解決
計算方法は「自動」なのに更新されない
セルが文字列として扱われていないかを確認してください。表示形式が「文字列」のセルに数式を入れると =NOW() の文字がそのまま残ります。表示形式を「標準」に戻し、セルをダブルクリックして Enter を押し直すと再認識されます。直らない場合は Ctrl+Shift+Alt+F9 で依存関係ごと作り直します。
再計算のたびにブックが固まる
NOW()・OFFSET・INDIRECT といった揮発性関数が大量にあると、1セル触るたびにブック全体が計算し直されます。まずは揮発性関数を INDEX などの非揮発性の関数に置き換えられないかを検討し、それが難しければ計算方法を一時的に「手動」にして作業し、必要なときだけ F9 を押す運用にします。
Excel for the web・共同編集でマクロが動かない
ブラウザー版の Excel ではマクロは実行されません。Microsoft 公式も「この形式のブックを開くことはできますが、マクロはブラウザー ウィンドウでは実行されません」と明記しています(Microsoft公式:ブラウザーと Excel でのブックの使用の違い)。Application.OnTime も Worksheet_Change も、ブラウザーで開いた時点で無効です。SharePoint や OneDrive で共同編集する運用なら、マクロ前提の設計は最初から採らないでください。
時刻そのものが数分ずれている
NOW() が返すのは Windows がその PC で持っている時刻です。パソコン本体の時計がずれていれば、NOW() も同じだけずれた値を返します。打刻がいつも数分ずれる、他の人のファイルと時刻が合わない、というときは Excel ではなく OS 側を疑ってください。原因の切り分けと直し方はパソコンの時計がずれる原因と直し方にまとめています。
秒まで見たいだけなら、Excelの外に置く
「作業中に現在時刻を秒まで見たい」だけなら、Excel に時計を作り込む必要はありません。Windows なら OS 側の時計を大きく・秒表示にできます(タスクバーの時計を大きく・秒表示にする方法)。手元にスマホを置けるならiPhoneのホーム画面に時計ウィジェットを表示する方法のほうが視認性は上です。マクロ有効ブックを作るコストに見合うかを先に考えてみてください。
必要なのが「時刻」ではなく「経過時間」だったとき
Excel で現在時刻を出そうとしている場面をよく見ると、本当に測りたいのは作業の残り時間や経過時間だった、ということが少なくありません。その場合は関数を組むより、ブラウザで開くだけの無料タイマーを別ウィンドウで開いておくほうが速く、ブックも重くなりません。インストールも登録も不要です。
よくある質問
Excelの現在時刻が自動更新されないのはなぜですか?
NOW関数もTODAY関数も、ワークシートが再計算されたとき、またはマクロが実行されたときにだけ更新される仕様だからです。時間の経過とともに自動で進むことはありません。ブックを開いても更新されない場合は、計算方法の設定が「手動」になっている可能性が高いので、数式タブの計算方法の設定を「自動」に戻してください。
NOW関数とTODAY関数の違いは何ですか?
NOWは現在の日付と時刻を、TODAYは現在の日付だけを返します。どちらも揮発性関数で、再計算のたびに値が計算し直される点は同じです。時刻まで必要ならNOW、日付だけでよいならTODAYを使います。
入力した時刻を固定して残すにはどうすればいいですか?
関数ではなくショートカットキーで固定値として入力します。Windows版のExcelでは、現在の日付がCtrl+セミコロン、現在の時刻がCtrl+Shiftとコロンです。すでにNOW関数で入れてしまった場合は、その範囲をコピーして値として貼り付ければ、その時点の日時で固定できます。
Excelで1秒ごとに動く時計を作れますか?
標準機能ではできません。VBAのApplication.OnTimeで、1秒後に自分自身を呼び出すプロシージャを組めば実現できますが、マクロ有効ブックでの保存が必要で、ブラウザー版のExcelでは動きません。停止するときはSchedule引数をFalseにして予約を解除します。
Googleスプレッドシートなら自動で更新できますか?
できます。ファイルの設定にある計算タブで、再計算の頻度を変更時、変更時と毎分、変更時と毎時から選べます。ただし最短でも1分ごとで、1秒ごとの更新はスプレッドシートでもできません。