スプレッドシートの日付自動入力完全攻略!TODAY関数の罠と固定ワザ
業務日報の作成や進捗管理シートの更新時、入力した日付が翌日開いたら勝手に今日の日付へ書き換わっていた――そんなトラブルに頭を抱えた経験はないでしょうか。Googleスプレッドシートで日々の記録を管理する際、多くのビジネスパーソンが真っ先に試みるのが「TODAY関数」や「NOW関数」です。しかし、これらの関数は再計算のたびに現在日時に更新される揮発性の性質を持っているため、過去の入力履歴を残す用途には適していません。
現場で求められているのは、データを入力した瞬間だけGoogleスプレッドシートにタイムスタンプを自動記録し、その後は二度と値が書き換わらない確定状態を作ることです。本稿では、日常業務で直面する「日付が自動更新されてしまう罠」のメカニズムを解明し、GAS(Google Apps Script)を書かずにシート側の標準機能だけで完結する裏ワザから、本格的なスクリプト実装まで、現場で即座に役立つ解決策を徹底解説します。
📌 【この記事の重要ポイントまとめ】
- 要点1:TODAY関数はファイルを開くたびに再計算されるため、過去ログの保存には「値の固定化」の設計が必須となる。
- 要点2:GASを使わない手軽な方法として「反復計算(循環参照)を活用した数式」や「入力用ショートカットキー」が極めて有効である。
- 要点3:大人数で共有する基幹シートやチェックボックス連動には、編集トリガー(onEdit)を用いたスクリプト処理が最も堅牢でトラブルを防ぎやすい。
【2026年最新】「翌日勝手に変わる」TODAY関数の落とし穴と日付を固定する根本理由
スプレッドシートの日付自動入力で最も頻出する失敗が、「スプレッドシート 日付 自動入力 変わらない」状態を作ろうとしてセルに「=TODAY()」と打ち込んでしまうケースです。一見すると入力した当日は意図通りに機能しているように見えますが、翌朝シートを開いた瞬間にすべての行の日付が当日の日付へ一斉に上書きされ、過去の作業実績が跡形もなく消滅します。
この現象が起きる原因は、表計算ソフトにおける揮発性関数(Volatile Functions)の仕様にあります。TODAY関数やNOW関数は、シート内のいずれかのセルが編集されたり、ページが再読み込みされたりする都度、内部時計を参照して再計算を実行します。つまり、「入力時点の日時を記録する」のではなく、「現在開いている日時を表示し続ける」関数なのです。
日報の提出日時、受発注ステータスの変更履歴、タスク完了日などの記録においては、スプレッドシートの日付を自動更新させない方法を正しく適用し、一度刻印されたタイムスタンプを静的な値として保護しなければなりません。

【実態検証】利用者の生の声と現場目線で見えた「タイムスタンプ事故」のリアル
ITツールの導入が進む企業現場でも、スプレッドシートの運用不備によるヒューマンエラーは後を絶ちません。クラウドツールのサポート窓口やSNS、知恵袋などのコミュニティには、毎日のように切実なトラブル事例が寄せられています。
「先月の経費申請シートで承認日をTODAY関数で出していたため、月をまたいだ瞬間に全件が今月の日付になり、経理監査で重大な指摘を受けた」「共有タスクリストで完了チェックを入れた日付が毎日更新されてしまい、誰がいつ納品したのか追跡不能になった」といった声は、まさに設計ミスが生んだ典型例です。
こうしたトラブルの根底には、手入力の打ち間違いを防ぐために自動化を進めた結果、関数の挙動を誤解してデータの完全性を損なってしまうという皮肉な構造が存在します。業務の透明性を担保するためには、利用者のスキルセットやシートの運用規模に合わせた最適なアプローチを選択することが不可欠です。
スプレッドシートの日付自動入力を固定化する4大手法
作業環境や求める自動化の深度に応じて、現在現場で利用されている手法は大きく4つに分類されます。それぞれの具体的な手順を解説します。
1. 最もシンプルで壊れない「日付ショートカットキー」
関数やプログラムに頼らず、手動入力を極限まで効率化するアプローチです。手入力ではありますが、日付が勝手に変わるリスクが構造上ゼロになります。
- 今日の日付を入力:
Ctrl + ;(Windows) /Cmd + ;(Mac) - 現在の時刻を入力:
Ctrl + Shift + ;(Windows) /Cmd + Shift + ;(Mac) - 現在の日時(タイムスタンプ)を入力:
Ctrl + Alt + Shift + ;(Windows) /Cmd + Option + Shift + ;(Mac)
2. GAS不要!「反復計算」を応用した数式による自動固定
「プログラムは書けないが、文字を入力した瞬間に自動で日付を記録させたい」という場面で強力な裏ワザとなるのが、スプレッドシートの反復計算を活用した日付固定テクニックです。
通常、自分自身のセルを参照する数式(循環参照)を入力するとエラーになりますが、スプレッドシートの設定で「反復計算」を許可することで、すでに値が入っている場合は再計算を行わず値を維持させることが可能になります。
【設定手順】
- スプレッドシートのメニューから「ファイル」>「設定」を開く。
- 「計算」タブを選択し、「反復計算」のトグルをオンにする(最大反復回数は「1」で可)。
- 日付を表示させたいセル(例:B2)に以下の数式を入力する。
=IF(A2="","",IF(B2<>"",B2,TODAY()))
この数式は、「A2に入力がないときは空白、B2にすでに日付が存在する場合はそのままB2の値を維持、どちらでもない(初回入力)時だけTODAY関数で今日の日付をセットする」という挙動を実現します。これにより、スプレッドシートでTODAY関数を固定したような動作を手軽に再現できます。
3. チェックボックス連動による完了日の自動記録
進捗管理シートなどで重宝されるのが、スプレッドシートのチェックボックスと日付自動入力の連動です。上記の反復計算を有効化した状態で、A列に挿入したチェックボックスが「TRUE」になったタイミングでB列に日付を刻印します。
=IF(A2=TRUE,IF(B2<>"",B2,TODAY()),"")
チェックを外せば日付はクリアされ、チェックを付けた初日のみ日付が固定化されます。
4. 大規模・共有ファイルに最適な「GAS(Google Apps Script)」
複数人が同時に編集するシートや、数式の誤削除を防ぎたい基幹業務では、Google Apps Script(GAS)の日付自動入力が最も信頼性の高い選択肢です。編集イベント(onEdit)をフックにすることで、セルの編集を検知してタイムスタンプを直接「値」として書き込みます。
【実装手順】
- メニューの「拡張機能」>「Apps Script」をクリック。
- 以下のスクリプトを貼り付けて保存する。
function onEdit(e) { var sheet = e.source.getActiveSheet(); var range = e.range; if (sheet.getName() ==="タスク管理" && range.getColumn() === 1) { var row = range.getRow(); if (row > 1) { var dateCell = sheet.getRange(row, 2); // B列に出力 if (range.getValue() !=="" && dateCell.getValue() ==="") { dateCell.setValue(new Date()); dateCell.setNumberFormat("yyyy/MM/dd HH:mm:ss"); } } } }この処理であれば、セルに数式を残さずJavaScriptエンジンが直接日付を書き込むため、翌日勝手に値が変更される心配は皆無です。Googleスプレッドシートの入力時日日時自動記録を完全に自動化できます。
日付と同時に「曜日」を自動入力・表示させる設定
日付だけでなく曜日も自動で出したい場合、わざわざ別の列に関数を組む必要はありません。対象セルの表示形式を「表示形式」>「数字」>「カスタム日時」から変更し、「yyyy/mm/dd (ddd)」などの形式を指定するだけで、入力された日付に応じて「(月)」「(火)」といった曜日が自動表示されます。
【徹底比較】手法別のメリット・デメリットと運用リスク
業務要件やチームのスキルレベルによって、採用すべきアプローチは異なります。各手法の客観的な特性を比較検証しました。
| 手法 | 実装コスト・難易度 | 自動化レベル | 編集部の見解・堅牢性 |
|---|---|---|---|
| ショートカットキー (Ctrl + ;) | ★☆☆☆☆ (設定不要、即導入可能) | 手動 (1秒で入力完了) | 個人作業なら最も確実。関数破損のリスクがなく動作も最速。 |
| 反復計算(循環参照) IF関数応用 | ★★☆☆☆ (シート設定変更のみ) | 完全自動 (トリガー不要) | GAS不要で手軽だが、行コピーやセル上書きで壊れやすい点に留意。 |
| GAS(onEdit) スクリプト自動化 | ★★★★☆ (コード導入の手間あり) | 完全自動 (値として直接固定) | 最も堅牢。ユーザーが誤って数式を消去する事故を防げるため組織向き。 |
| TODAY関数単体 (※非推奨) | ★☆☆☆☆ (=TODAY() のみ) | 自動更新 (毎日上書き) | 過去ログ管理には絶対使用不可。「本日の残日数計算」等にのみ限定。 |
一般に知られていない盲点とネットの誤解
ネット上の簡易Tipsでは「反復計算を使えばGAS不要で完璧」と紹介されるケースが目立ちますが、現場での運用においては重大な盲点が存在します。
第一に、シート全体の計算パフォーマンス低下です。反復計算を有効にすると、本来エラーとして検知されるべき誤った循環参照もすべて許容されてしまい、複雑なスプレッドシートでは計算ループが発生して動作が極端に重くなるリスクを孕んでいます。
第二に、コピペや行挿入による数式破損です。現場のオペレーターが別のセルから値をドラッグ&ドロップしたり、行を一括削除した際、組み込んでいたIF関数が簡単に吹き飛んでしまいます。「GASは難しそうだから」と安易に反復計算だけで大人数共有シートを運用すると、ある日突然過去の日付がすべて初期化されるトラブルを招きかねません。
【プロの結論】おすすめできる人・慎重になるべき人の判断基準
組織のデジタルガバナンスと工数対効果の観点から導き出した、明確な切り分け基準を提示します。
【反復計算やショートカットが向いているケース】
- 自分専用のタスクメモや、2〜3人程度の小規模チームで共有する簡易ログ。
- 会社のセキュリティポリシーにより、スクリプト実行やマクロの利用が制限されている環境。
- 外部委託スタッフなど、GASの仕様を理解していないメンバーが一時的に作業する場合。
【GASによるタイムスタンプ自動記録を導入すべきケース】
- 受発注管理、勤怠管理、経費精算など、日時の書き換えがコンプライアンス上のリスクとなる基幹シート。
- 10人以上が同時に閲覧・編集を行い、頻繁に行の追加や並び替えが発生するプロジェクトシート。
- スマホやタブレットのGoogleスプレッドシートアプリ経由で入力を行う現場業務。

【スプレッド シート 日付 自動 入力】に関するよくある質問(FAQ)
Q1:ショートカットキーで日付を入力したのに、時間まで表示されてしまいます。日付だけにするには?
A1:セルの表示形式が「日時」になっていることが原因です。対象のセルを選択し、ツールバーの「表示形式」>「数字」>「日付」をクリックして書式を統一してください。
Q2:反復計算の数式を入れたのに「循環参照の警告」が出て動作しません。
A2:ファイル設定の反復計算が有効になっていません。「ファイル」>「設定」>「計算」タブを開き、「反復計算」のスイッチを「オン」にしてから保存してください。
Q3:GASのスクリプトを保存したのに、セルを編集しても日付が入りません。
A3:スクリプト内のシート名(コード中の「タスク管理」など)と、実際のスプレッドシート下部のタブ名が完全一致しているか確認してください。また、編集した列番号(A列なら1、B列なら2)がプログラムとズレていないかもチェックが必要です。
Q4:スマホアプリ版のスプレッドシートでも自動入力や固定化は機能しますか?
A4:GAS(onEdit)による自動入力は、スマホアプリからセルを編集した場合でもサーバー側でトリガーが実行されるため正常に動作します。一方、ショートカットキーは外付けキーボードがないと利用できず、反復計算はモバイル端末での動作が不安定になる場合があるため、スマホ主体の運用にはGASが最も推奨されます。
まとめ:手作業と自動化の境界線を見極めて業務効率を最大化する
スプレッドシートにおける日付の自動入力は、一見すると些細なテクニックに見えますが、日々の業務時間を削り出し、記録の正確性を守るための極めて重要な土台です。
手軽さを最優先するなら「反復計算」、共有環境での完全な自動化と堅牢性を求めるなら「GAS」、そして個人レベルでのミス防止なら「ショートカットキーの定着」。それぞれの長所と限界を理解した上で、自組織のワークフローに最も合致した手法を選択してください。ツールの特性を正しく手なずけることこそが、無用なトラブルを防ぎ、生産性を引き上げる近道となります。 (出典: スプレッド シート 日付 自動 入力(Yahoo!ニュース))