Excelで表を作っていると、「名前や金額を入れたら、隣のセルに今日の日付も自動で入ってほしい」と思う場面がよくあります。たとえば、問い合わせ管理、入金チェック、在庫の入荷記録、タスクの受付日、日報、顧客リスト。毎回手で日付を入れるのは地味に面倒ですし、入力し忘れるとあとで「これ、いつ登録したんだっけ」と困ります。
ところが、ここで多くの人が最初にぶつかる壁があります。
=TODAY()
を使えばいいと思ったのに、翌日ファイルを開くと日付が今日に変わってしまうのです。これはExcelの故障ではありません。むしろ関数が正しく働いている証拠です。でも、読者が本当に欲しいのは「今日の日付を表示すること」ではなく、入力した日の記録を残すことである場合が多いはずです。
この記事では、Excelで入力したら日付が入る関数の考え方を、初心者でも迷わないように整理します。さらに、関数だけでできる方法、ショートカットで確実に固定する方法、循環参照を使った自動記録、VBAで本格的にタイムスタンプを残す方法まで、実務で選べる形に落とし込みます。ExcelのWeb版やMicrosoft365のCopilot活用が広がる今でも、日付入力の基本は変わりません。だからこそ、最初に正しい使い分けを覚えると、毎日の表作業がかなり楽になります。
この記事の要点は次のとおりです。
- 入力したら日付を表示するだけなら
IF関数と
TODAY関数で十分です。
- 入力した日のまま日付を固定したいなら、関数だけに頼らずショートカット、循環参照、VBAを使い分ける判断が必要です。
- 初心者はまず固定日付と更新日付の違いを理解し、業務用の表ではあとから変わらない記録方法を選ぶことが大切です。
- Excelで入力したら日付が入る関数の前に知るべき本当の検索意図
- まず結論!目的別に選ぶ正しい方法
- 初心者向け!入力したら日付を表示する基本の関数
- ここでつまずく!TODAY関数の日付が勝手に変わる理由
- 入力した日を固定したいならショートカットが最速
- 関数だけで固定日付っぽくしたい場合の循環参照テクニック
- 業務用ならVBAで入力した瞬間の日付を自動記録する
- ExcelのWeb版やCopilot時代でも変わらない日付自動入力の考え方
- 実務で失敗しない自動日付表の作り方
- どの方法を選ぶべきか?迷ったときの判断基準
- Excelで入力したら日付が入る関数に関する疑問解決
- 上級者向け!きれいな運用にするための設計ポイント
- まとめ
Excelで入力したら日付が入る関数の前に知るべき本当の検索意図
このテーマで検索する人は、たいてい「関数名を知りたい」と思っています。けれど、実際の悩みはもう少し深いところにあります。多くの場合、知りたいのは「A列に入力したらB列に日付が自動で出る方法」です。そして、さらに一歩進むと「その日付が翌日になっても変わらない方法」を求めています。
ここを間違えると、記事を読んでも作業が解決しません。なぜなら、Excelの日付には大きく分けて更新される日付と固定される日付があるからです。
=TODAY()
や
=NOW()
は便利ですが、ワークシートを再計算すると値が変わる性質があります。つまり、2026年6月12日に入力しても、翌日に開けば2026年6月13日になります。
一方、Ctrlキーとセミコロンを使って入れた日付や、VBAで書き込んだ日付は、セルに値として保存されます。これは写真を撮るようなものです。今日という状態をその場で切り取ってセルに貼り付けるので、明日になっても勝手には変わりません。
つまり、Excelで入力したら日付が入る関数を探している人が最初に考えるべきことは、「関数は何か」ではなく、その日付は毎日更新されてよいのか、それとも入力日として固定したいのかです。
まず結論!目的別に選ぶ正しい方法
最初に答えをまとめると、目的によって正解は変わります。すべてをひとつの関数で解決しようとすると失敗しやすいので、下の表で自分の作りたい表に近いものを選んでください。
| やりたいこと | おすすめ方法 | 向いている場面 |
|---|---|---|
| 入力があった行だけ今日の日付を表示したい |
=IF(A2<>"",TODAY(),"")
|
毎日更新されても問題ない確認用の表。 |
| 入力があった行だけ現在日時を表示したい |
=IF(A2<>"",NOW(),"")
|
今の時刻を画面上で見たい表。 |
| 入力した日をあとから変えずに残したい | ショートカットまたはVBA | 受付日、登録日、入金日、出荷日などの記録表。 |
| 関数だけで固定に近い動きをさせたい | 循環参照と反復計算 | VBAを使えない環境で、仕組みを理解して管理できる場合。 |
| 複数人で使う業務表にしたい | VBAまたはPowerAutomateなどの自動化 | 入力ミスを減らし、記録の信頼性を高めたい表。 |
この表で一番大事なのは、
TODAY
関数は入力日を固定する関数ではないという点です。初心者向けの記事ではよく
=IF(A2<>"",TODAY(),"")
が紹介されます。たしかに見た目は「入力したら日付が入った」ように見えます。しかし、実務ではそのまま使うと危険なことがあります。なぜなら、請求管理や受付管理で日付が翌日に変わると、記録として信用できなくなるからです。
初心者向け!入力したら日付を表示する基本の関数
隣のセルに今日の日付を出す一番シンプルな式
まずは、関数で「入力されたら日付を表示する」方法から見ていきましょう。たとえば、A列に名前や内容を入力し、B列に日付を表示したい場合は、B2セルに次の式を入れます。
=IF(A2<>"",TODAY(),"")
意味はとてもシンプルです。
A2<>""
は「A2セルが空白ではないなら」という意味です。A2に何か入力されていれば今日の日付を表示し、何も入力されていなければ空白にします。小学生にもわかるように言えば、「A2に文字があるなら今日の日付を出してね。なければ何も出さないでね」というお願いをExcelにしている状態です。
この式は、タスク一覧や簡単なチェック表ではとても便利です。たとえば「今日対応が必要なものだけを見たい」「入力済みの行だけ日付を表示したい」という用途なら、これで十分役に立ちます。
日付だけでなく時刻も入れたい場合
日付だけではなく、入力された時刻まで見たい場合は
NOW
関数を使います。
=IF(A2<>"",NOW(),"")
TODAY
関数は日付だけを返します。
NOW
関数は日付と時刻を返します。問い合わせの受付時刻、電話対応の開始時刻、作業ログの確認などでは
NOW
関数のほうが便利に見えるかもしれません。
ただし、ここでも注意が必要です。
NOW
関数も再計算で変わります。つまり、「入力した瞬間の時刻を保存する」というより、「今このブックを見ている時点の日時を表示する」に近い動きです。時刻を記録として残したい場合は、あとで紹介する固定方法を使いましょう。
別の列を見て日付を入れる応用式
実務では、A列ではなくC列やD列を見て日付を出したいことがあります。たとえば、D列に「完了」と入力されたらE列に完了日を出したい場合は、E2セルに次のように入れます。
=IF(D2="完了",TODAY(),"")
この式は「D2が完了なら今日の日付を出す」という意味です。ステータス管理に向いています。ただし、これも日付は更新されます。完了日を記録として残したいなら、やはり固定方法を使う必要があります。
ここでつまずく!TODAY関数の日付が勝手に変わる理由
「昨日入力したのに、今日見たら日付が変わっている」。この現象で不安になる人は多いです。でも、これはExcelが間違っているのではありません。
TODAY
関数は「今日の日付を返す関数」だからです。
Excelでは、日付は内部的に連続した数字として扱われます。この数字を日付の表示形式で見せているだけなので、関数や表示形式を理解していないと混乱しやすいです。たとえば、日付のセルの表示形式を標準や数値に変えると、日付が数字のように見えることがあります。これはExcelが日付を計算できるようにするための仕組みです。
TODAY
関数や
NOW
関数は、ブックを開いたとき、数式を編集したとき、計算が走ったときに更新されます。そのため、売上表の「今日時点の年齢」や「今日までの経過日数」を出すには便利です。一方で、登録日や受付日のように「そのときの事実」を残す用途には向きません。
ここを覚えるだけで、Excelの日付トラブルはかなり減ります。変わってよい日付には関数、変わってはいけない日付には値として保存。この考え方が、日付自動入力の土台です。
入力した日を固定したいならショートカットが最速
手入力より速くて間違いにくい固定日付
関数ではなく、セルに今日の日付を固定で入れたいなら、ショートカットがもっとも簡単です。Windows版のExcelでは、日付を入れたいセルを選択して
Ctrl+;
を押します。これで今日の日付が値として入ります。時刻を入れたい場合は
Ctrl+Shift+:
を使います。
この方法の強みは、あとから日付が変わらないことです。関数ではなく値が入るため、明日ブックを開いても入力日がそのまま残ります。請求書の発行日、受付日、作業日、確認日など、証跡として残したい日付に向いています。
ただし、ショートカットには弱点もあります。入力者が自分で押す必要があるため、押し忘れが起きます。ひとりで使う簡単な表なら十分ですが、複数人で使う管理表なら、自動化したほうが安全です。
日付と時刻を同じセルに入れる方法
同じセルに日付と時刻を入れたい場合は、まず
Ctrl+;
で日付を入れ、半角スペースを入力し、続けて
Ctrl+Shift+:
で時刻を入れます。これで「日付+時刻」のタイムスタンプが固定されます。
ただし、この記事では本文中の不要な空白を避けるために説明だけにしています。実際のセルでは、日付と時刻の間に区切りがないと読みにくいので、半角スペースや表示形式で見やすく整えるのがおすすめです。
関数だけで固定日付っぽくしたい場合の循環参照テクニック
VBAを使えない会社や、マクロ付きファイルを禁止されている環境では、関数だけでなんとかしたい場面があります。その場合に使われるのが、循環参照と反復計算を利用したタイムスタンプです。
たとえば、A2に入力したらB2に入力日を固定したい場合、B2に次の式を入れます。
=IF(A2="","",IF(B2="",TODAY(),B2))
この式は少し不思議です。B2セルの中でB2自身を参照しています。普通ならExcelは「自分で自分を見ているよ」と警告します。これが循環参照です。反復計算を有効にすると、最初にA2へ入力したときだけB2に今日の日付を入れ、その後はB2自身の値を保つ、という動きにできます。
設定の流れは次のとおりです。
- Excelのオプションを開き、数式の設定画面に進みます。
- 反復計算を有効にし、最大反復回数を小さめの値に設定します。
- 日付を出したいセルに循環参照を使った式を入力します。
- 入力後に日付が固定されるか、別の日に開いても変わらないかをテストします。
この方法は便利ですが、初心者に無条件でおすすめできる方法ではありません。循環参照は通常、数式ミスとして扱われることが多く、別の担当者がブックを開いたときに意味がわからなくなる可能性があります。また、Excelの設定に依存するため、他のパソコンで同じように動くか確認が必要です。
そのため、循環参照を使うなら、シート内に「このブックは反復計算を使っています」とメモを残すのが親切です。自分だけで使うなら便利。チームで使うなら慎重に。これが実務でのちょうどよい判断です。
業務用ならVBAで入力した瞬間の日付を自動記録する
VBAが向いている理由
複数人で使う管理表や、入力漏れを防ぎたい表なら、VBAを使う方法がもっとも実務的です。VBAなら、指定した列に入力された瞬間に、隣の列へ日付を値として書き込めます。関数のように再計算で変わることもありません。
たとえば、A列に入力があったらB列に日付を入れるなら、対象シートのコード画面に次のようなコードを書きます。
PrivateSubWorksheet_Change(ByValTargetAsRange)
IfIntersect(Target,Range("A:A"))IsNothingThenExitSub
IfTarget.CountLarge>1ThenExitSub
Application.EnableEvents=False
IfTarget.Value<>""AndCells(Target.Row,"B").Value=""Then
Cells(Target.Row,"B").Value=Date
EndIf
IfTarget.Value=""ThenCells(Target.Row,"B").ClearContents
Application.EnableEvents=True
EndSub
このコードの考え方は単純です。A列が変更されたときだけ動き、A列に何か入っていてB列が空なら今日の日付を書き込みます。A列が空に戻されたらB列の日付も消します。登録日を残したい場合は、最後の削除処理を外すこともできます。
実務では、一度入った日付を勝手に上書きしない設計が大切です。なぜなら、あとから名前や金額を修正しただけで登録日まで変わってしまうと、記録の意味がなくなるからです。上のコードでは、B列が空のときだけ日付を入れるため、既存の日付を守りやすくなっています。
日付だけでなく日時を残す場合
日付だけではなく、時刻まで残したい場合は、
Date
の代わりに
Now
を使います。
Cells(Target.Row,"B").Value=Now
この場合、B列の表示形式を「年月日と時刻」にしておくと見やすくなります。問い合わせ管理や受付ログでは、日付だけより日時のほうが役に立つことがあります。ただし、時刻まで残すと情報量が増えるため、必要な場面だけに使うのがおすすめです。
マクロを使うときの注意点
VBAを使うときは、ファイル形式を
.xlsm
にする必要があります。また、会社のセキュリティ設定によってはマクロが無効化されることがあります。最近のExcel環境では、AIやWeb版Excelの機能が進化していますが、Web版ではVBAがそのまま動かない場面があります。つまり、パソコン版Excelで運用するのか、Web版で共同編集するのかによって、選ぶ方法が変わります。
Web版Excelは共同編集や自動保存に強く、日常的な表作成には十分便利です。一方で、マクロを前提にした自動日付記録を動かすなら、デスクトップ版Excelでの運用確認が必要です。この違いを知らずに「家では動いたのに会社では動かない」となるケースがあるので、最初に利用環境を確認しておきましょう。
ExcelのWeb版やCopilot時代でも変わらない日付自動入力の考え方
2026年のExcelは、以前よりもAI機能や共同編集が身近になっています。Microsoft365ではCopilotがExcelのデータ分析や数式提案を助ける流れが強まり、Web版Excelでも自動保存、リアルタイム共同編集、バージョン履歴が使いやすくなっています。直近のMicrosoft365更新情報でも、Excelブックに対するCopilotChatの扱いやローカルファイル対応が広がっており、Excelは「ひとりで表を作る道具」から「AIとチームで編集する作業場」に近づいています。
ただし、ここで勘違いしてはいけません。AIが数式を提案してくれても、日付を更新表示にするのか、入力記録として固定するのかという判断は人間側に残ります。Copilotに「入力したら日付を入れる式を作って」と頼むと、まず
IF
関数と
TODAY
関数を提案されることがあります。しかし、それが登録日の記録に適しているとは限りません。
AI時代に大事なのは、関数を丸暗記することではなく、目的を正しく言葉にすることです。「A列に入力されたらB列に今日の日付を表示したい」なのか、「A列に初めて入力された日時をB列に固定で残したい」なのか。この違いを伝えられる人ほど、ExcelでもAIでも失敗しにくくなります。
実務で失敗しない自動日付表の作り方
ここからは、初心者がそのまま使える形で、入力日を管理する表の作り方を考えてみます。例として、A列に内容、B列に登録日、C列に担当者、D列にステータスを置く表を作るとします。
簡単な確認用なら、B2に
=IF(A2<>"",TODAY(),"")
を入れて下までコピーします。これでA列に内容を入れた行だけ日付が表示されます。練習用や個人メモなら、この方法はとてもわかりやすいです。
しかし、問い合わせ台帳や入金管理のように、日付が証拠になる表では、この方法は避けたほうが安心です。その場合は、ショートカットで固定日付を入れるか、VBAで自動的に値として書き込む方法を選びます。特にチームで使うなら、VBAのほうが入力者によるバラつきを減らせます。
さらに、表としての使いやすさを上げるなら、日付列に表示形式を設定しておきましょう。たとえば「2026/6/12」のように短く見せるのか、「2026年6月12日」のように読みやすく見せるのかを決めます。Excelでは見た目の形式と中身の値は別物です。中身が正しい日付なら、あとから並べ替えや月別集計もできます。
日付列を文字列で入力してしまうと、並べ替えや集計で困ることがあります。見た目は日付でも、Excelが日付として認識していないケースがあるからです。初心者ほど、日付は手で「6月12日」と打つより、ショートカットや関数やVBAで入れるほうが安全です。
どの方法を選ぶべきか?迷ったときの判断基準
Excelで入力したら日付が入る関数を探している人に、いちばん伝えたい判断基準があります。それは、日付があとから変わったら困るかどうかです。困らないなら関数で十分です。困るなら、固定する方法を選びましょう。
迷いやすい場面を整理すると、次のようになります。
- 今日時点の状態を見たいだけなら、
TODAY関数や
NOW関数を使うのが簡単です。
- 受付日、登録日、入金日、出荷日などの事実を残したいなら、ショートカット、循環参照、VBAのどれかを使うのが安全です。
- 複数人で使う表や長く残す表なら、あとから仕組みを説明できる方法を選ぶことが重要です。
個人的なおすすめは、練習や個人メモなら関数、ひとり作業の記録ならショートカット、会社で使う台帳ならVBAです。循環参照は便利ですが、仕組みを知らない人が見ると不安になりやすいので、使うなら説明メモを必ず残しましょう。
Excelで入力したら日付が入る関数に関する疑問解決
=TODAY() だけではだめですか?
「今日の日付を表示したい」だけなら
=TODAY()
で大丈夫です。ただし、「入力した日を記録したい」なら不十分です。
TODAY
関数は今日の日付を返す関数なので、翌日や再計算時に変わります。登録日として残すなら、値として固定する方法を選びましょう。
入力したら隣のセルに日付が入る関数は何ですか?
基本形は
=IF(A2<>"",TODAY(),"")
です。A2に何か入力されると日付が表示され、空白なら何も表示されません。ただし、この日付は固定ではありません。固定したいなら、ショートカット、循環参照、VBAを検討してください。
日付ではなく日時を入れたい場合はどうしますか?
表示だけなら
=IF(A2<>"",NOW(),"")
を使います。日時を固定したいなら、ショートカットで日付と時刻を入れるか、VBAで
Now
を書き込みます。問い合わせ受付や作業ログでは日時のほうが便利ですが、必要以上に細かくすると表が読みにくくなるので、用途に合わせて決めましょう。
関数で入力日を完全に固定できますか?
通常の
TODAY
関数や
NOW
関数だけでは完全には固定できません。循環参照と反復計算を使えば固定に近い動きはできますが、設定に依存します。確実性を重視するなら、ショートカットで値を入れるか、VBAで値として書き込む方法が安心です。
Web版Excelでも同じように使えますか?
TODAY
関数、
NOW
関数、
IF
関数のような基本的な関数はWeb版Excelでも使えます。共同編集や自動保存も便利です。ただし、VBAマクロを前提にした自動入力は、Web版では同じように動かない場合があります。Web版中心で使うなら、関数や手動ショートカット、または別の自動化手段を検討するとよいでしょう。
日付が数字になってしまうのはなぜですか?
Excelは日付を内部的に数字で管理しています。表示形式が標準や数値になっていると、日付が数字のように見えることがあります。セルを選択して表示形式を日付に変更すれば、見慣れた日付表示に戻せます。中身が日付として認識されていれば、並べ替えや計算に使えます。
日付を消したくない場合はどうすればいいですか?
VBAを使う場合は、入力セルが空になったときに日付セルを消す処理を入れないようにします。また、上書きを防ぐには「日付セルが空のときだけ書き込む」条件を入れます。これにより、あとからA列を修正しても登録日が変わりにくくなります。
上級者向け!きれいな運用にするための設計ポイント
日付自動入力は、式を入れれば終わりではありません。長く使える表にするには、どの列が入力列で、どの列が記録列なのかをはっきりさせる必要があります。たとえば、A列を入力内容、B列を登録日、C列を更新日と分けると、あとから見たときに意味がわかりやすくなります。
登録日は「最初に入力された日」、更新日は「最後に修正された日」です。この2つをごちゃ混ぜにすると、データの信頼性が下がります。顧客管理や案件管理では、登録日と更新日を分けるだけで、あとから分析しやすい表になります。
VBAでさらに作り込むなら、A列が初めて入力されたときにB列へ登録日を入れ、A列が変更されるたびにC列へ更新日時を入れる設計もできます。これにより、「いつ登録されたか」と「いつ最後に直されたか」を同時に追跡できます。小さな表では不要ですが、業務で使う台帳ではかなり役に立ちます。
また、日付列には入力規則や保護をかけるのも有効です。せっかくVBAで自動入力しても、誰かが手で日付を消してしまうと意味がありません。日付列をロックし、必要な入力列だけ編集できるようにすれば、表の品質が安定します。
さらに、データをあとで集計したいなら、表をテーブル化しておくと便利です。テーブルにすると、行を追加したときに数式や表示形式が引き継がれやすく、フィルターや並べ替えもしやすくなります。初心者には少し難しく見えますが、実務ではとても強力です。
まとめ
Excelで入力したら日付が入る関数を探しているなら、まず覚えるべき式は
=IF(A2<>"",TODAY(),"")
です。これで、A2に入力があったときだけ日付を表示できます。時刻まで必要なら
=IF(A2<>"",NOW(),"")
を使います。
ただし、この記事でいちばん大切なのは、関数で表示される日付はあとから変わる可能性があるということです。登録日や受付日など、入力した日の記録を残したいなら、ショートカットで値を入れるか、循環参照を理解して使うか、VBAで自動入力する方法を選びましょう。
初心者はまず関数で仕組みを体験し、日付が変わる理由を理解する。実務で使うなら、日付を固定する方法へ進む。この順番なら、失敗せずに学べます。Excelの日付自動入力は、派手な機能ではありません。でも、毎日の小さな入力漏れを防ぎ、あとから見返せる信頼できる表を作るための大事な土台です。今日作る表にまず1列、入力日を残す仕組みを入れてみてください。明日の自分が、きっと助かります。




コメント