「契約書の期限まであと何日か自動で表示したい」「入力日を毎回手で打つのが面倒でミスが起きる」「生年月日から年齢を正確に計算したい」——Excelでこのような日付関連の処理をするときに核となるのがDATE・TODAY・NOW関数です。
Excelでは日付を「シリアル値」という数値で管理しているため、日付どうしを引き算するだけで経過日数を計算できます。TODAY関数を使えばファイルを開くたびに当日の日付が自動入力され、DATE関数を使えば年・月・日を自由に組み合わせて任意の日付を生成できます。これらを正しく理解することで、期限管理・勤怠計算・年齢算出などの業務処理が格段にスムーズになります。また、MOS Excel 365試験でも日付関数は必出分野のひとつです。本記事では、シリアル値の仕組みからDATE・TODAY・NOW関数の基本構文・YEAR/MONTH/DAY関数との組み合わせ・実務パターン・エラー対処・MOS試験攻略法まで2026年最新版で徹底解説します。
「Excelで日付計算を自動化したい」「MOS試験の日付関数問題を確実に得点したい」という方は、ぜひ最後までお読みください。
Excelの日付の仕組み:シリアル値を理解する
日付関数を使いこなすために、まずExcelが日付をどのように管理しているかを理解することが重要です。Excelでは日付をシリアル値と呼ばれる数値で内部管理しています。
シリアル値とは何か
シリアル値とは、1900年1月1日を「1」として、1日ごとに1ずつ増える連番の整数です。たとえば2026年1月1日のシリアル値は46023です。Excelが日付を数値として管理しているからこそ、日付どうしの引き算で経過日数を計算したり、日付に整数を足してn日後を求めたりできます。
| 日付 | シリアル値 | 備考 |
|---|---|---|
| 1900年1月1日 | 1 | シリアル値の起点 |
| 2000年1月1日 | 36526 | よく参照される基準日 |
| 2026年1月1日 | 46023 | 2026年の始まり |
| 2026年6月4日 | 46176 | 本記事執筆時点 |
日付が入力されたセルを選択して「セルの書式設定」で「標準」に変更すると、シリアル値の数字が表示されます。逆に、数値が入ったセルを「日付」書式に変えると日付として表示されます。日付の表示がおかしいときは書式設定を確認するのが第一歩です。
時刻も数値で管理される
時刻はシリアル値の小数部分で管理されます。1日=1なので、12時間(半日)は0.5、6時間は0.25となります。たとえば2026年6月4日の正午12:00のシリアル値は「46176.5」です。これを理解しておくと、勤務時間の計算や時刻の比較で役立ちます。
TODAY関数・NOW関数:当日日付・現在時刻を自動入力する
TODAY関数とNOW関数は、引数が不要な特殊な関数です。ファイルを開いたとき・シートを再計算したときに自動で更新されるため、常に最新の日付・時刻を表示できます。
TODAY関数の構文と基本動作
TODAY関数の構文は「=TODAY()」です。引数はなく、カッコの中には何も入力しません。入力すると当日の日付がシリアル値として返され、セルの書式に従って日付として表示されます。
| 項目 | 内容 |
|---|---|
| 構文 | =TODAY() |
| 引数 | なし |
| 戻り値 | 当日の日付(シリアル値) |
| 更新タイミング | ファイルを開いたとき・再計算したとき |
| 書式 | デフォルトは日付書式。標準書式に変えるとシリアル値が表示される |
TODAY関数の最大の特徴はファイルを開くたびに自動更新される点です。「作成日」などの固定日付を入力したい場合はCtrl+;(セミコロン)で現在日付を固定値として入力する方法を使います。TODAY関数を使うと毎回開くたびに日付が更新されてしまうため、用途に合わせて使い分けが必要です。
NOW関数の構文と基本動作
NOW関数の構文は「=NOW()」です。TODAY関数と同じく引数は不要で、当日の日付と現在時刻の両方を返します。シリアル値では整数部分が日付、小数部分が時刻を表します。
| 関数 | 返す内容 | 例(2026年6月4日 14:30の場合) |
|---|---|---|
| TODAY() | 当日の日付のみ | 2026/6/4 |
| NOW() | 日付+現在時刻 | 2026/6/4 14:30 |
NOW関数で日付部分だけを取り出したい場合は「=INT(NOW())」を使います。INT関数が小数点以下を切り捨てるため、シリアル値の整数部分(日付)だけが残ります。時刻部分だけを取り出したい場合は「=NOW()-INT(NOW())」で計算できます。
TODAY・NOW関数の実務での使い方
- 期限までの残日数表示:「=A2-TODAY()」(A2に期限日が入っている場合)。結果をシリアル値ではなく数値として表示するために書式を「標準」に変えることがポイント
- 経過日数の計算:「=TODAY()-A2」(A2に開始日が入っている場合)。契約開始からの経過日数・在籍日数などに活用
- タイムスタンプの自動記録:NOW関数で入力日時を記録する。ただし再計算のたびに更新されるため、固定したい場合はVBAのワークシートイベントで固定値に書き換える手法が一般的
- 帳票の日付ヘッダー:「=TEXT(TODAY(),”yyyy年m月d日”)」のようにTEXT関数と組み合わせることで表示形式を整えた文字列として出力できる
DATE関数:年・月・日を組み合わせて日付を作る
DATE関数は、年・月・日の数値を引数として指定して、任意の日付のシリアル値を生成する関数です。文字列から日付を組み立てる場合や、年・月・日を別々のセルで管理している場合に特に役立ちます。
DATE関数の構文と引数
DATE関数の構文は「=DATE(年, 月, 日)」です。
| 引数 | 意味 | 使用例 |
|---|---|---|
| 年 | 日付の年を表す数値(4桁推奨) | 2026 |
| 月 | 日付の月を表す数値(1~12) | 6 |
| 日 | 日付の日を表す数値(1~31) | 4 |
「=DATE(2026, 6, 4)」と入力すると2026年6月4日のシリアル値が返されます。引数にセル参照を使うことで、A1に年、B1に月、C1に日が入っている場合は「=DATE(A1, B1, C1)」のように動的に日付を生成できます。
DATE関数の月・日のオーバーフローを活用する
DATE関数では、月や日に範囲外の数値を指定すると自動的に繰り上がり・繰り下がりが行われます。この仕様を使うと月末日の計算や特定日の前後の日付計算が簡単にできます。
| 数式 | 結果 | 仕組み |
|---|---|---|
| =DATE(2026, 7, 0) | 2026年6月30日 | 7月0日=6月の末日 |
| =DATE(2026, 6, 31) | 2026年7月1日 | 6月は30日まで→31日目は7月1日に繰り上がり |
| =DATE(2026, 13, 1) | 2027年1月1日 | 13月=翌年1月に繰り上がり |
| =DATE(2026, 0, 1) | 2025年12月1日 | 0月=前年12月に繰り下がり |
月末日の計算に最もよく使われるのが「=DATE(年, 月+1, 0)」のパターンです。翌月の0日目=当月の末日として計算されます。たとえば「=DATE(2026, 7, 0)」は2026年6月の末日(30日)を返します。Excelにはこの目的専用のEOMONTH関数(End Of MONTH)も存在しますが、DATE関数のオーバーフローを使う方法も頻出です。
YEAR・MONTH・DAY関数:日付から年・月・日を取り出す
YEAR・MONTH・DAY関数は、日付のシリアル値から年・月・日の数値をそれぞれ取り出す関数です。DATE関数の逆の操作と考えると理解しやすいです。
各関数の構文と使用例
| 関数 | 構文 | 例(A1に2026/6/4が入力) | 結果 |
|---|---|---|---|
| YEAR関数 | =YEAR(シリアル値) | =YEAR(A1) | 2026 |
| MONTH関数 | =MONTH(シリアル値) | =MONTH(A1) | 6 |
| DAY関数 | =DAY(シリアル値) | =DAY(A1) | 4 |
| WEEKDAY関数 | =WEEKDAY(シリアル値,[種類]) | =WEEKDAY(A1,2) | 4(木曜) |
WEEKDAY関数の第2引数(種類)は曜日番号の割り当て方を指定します。「1」は日曜日が1、「2」は月曜日が1(週の始まりが月曜)、「3」は月曜日が0で始まる形式です。日本の業務では月曜スタートの「2」を使うことが多いです。
YEAR・MONTH・DAY関数の実務活用パターン
- 月別集計の条件指定:「=MONTH(A2)=6」のようにMONTH関数の結果と数値を比較することで、特定の月のデータだけを抽出できる。SUMIFSやCOUNTIFSの条件列として使う場合は補助列を作るか、SUMPRODUCT関数と組み合わせる
- 年齢計算の補助:YEAR関数で生年月日の年を取り出し、TODAY関数と組み合わせて簡易年齢を算出できる(ただし正確な満年齢はDATEDIF関数が適切)
- 日付の組み替え:「=DATE(YEAR(A2), MONTH(A2)+3, DAY(A2))」のようにDATE+YEAR+MONTH+DAYを組み合わせて、3か月後の同じ日付を計算できる。契約更新日・定期メンテナンス日の計算に便利
日付計算の実務パターン:経過日数・期限・年齢の計算
シリアル値の仕組みを理解すれば、日付どうしを引き算するだけで経過日数が計算できます。ここでは実務でよく使う日付計算のパターンを解説します。
経過日数・残日数の計算
日付の差を計算するときは単純な引き算で求められます。結果はシリアル値の差、すなわち日数として返されます。
| 計算したいもの | 数式の例 | 書式設定 | 備考 |
|---|---|---|---|
| 経過日数 | =TODAY()-A2 | 標準(数値)に変更 | A2が開始日。今日を含まない日数 |
| 期限までの残日数 | =A2-TODAY() | 標準(数値)に変更 | A2が期限日。マイナスになったら期限超過 |
| 2つの日付の差(日数) | =B2-A2 | 標準(数値)に変更 | B2が終了日、A2が開始日 |
| n日後の日付 | =A2+30 | 日付書式のまま | A2の30日後を返す |
| n営業日後(概算) | =WORKDAY(A2,10) | 日付書式のまま | 土日を除いた10日後(WORKDAY関数) |
日付の差を求めた結果が数値ではなく日付書式で表示されてしまう場合は、セルの書式設定を「標準」または「数値」に変更してください。日付書式のままでは差分が「1900/1/26」のような日付で表示されてしまい、混乱の原因となります。
DATEDIF関数:年・月・日の差を正確に求める
DATEDIF関数は2つの日付の差を「年数」「月数」「日数」などの単位で計算できる関数です。年齢の計算や勤続年数の計算に特に役立ちます。Excelの数式入力ガイドには表示されない隠し関数ですが、MOS試験でも出題されることがあります。
DATEDIF関数の構文は「=DATEDIF(開始日, 終了日, 単位)」です。第3引数の単位によって返す値が変わります。
| 単位 | 返す内容 | 数式例(A2=生年月日, B2=TODAY()) | 結果の例 |
|---|---|---|---|
| “Y” | 満年数(年) | =DATEDIF(A2,B2,”Y”) | 35(35歳) |
| “M” | 満月数(月) | =DATEDIF(A2,B2,”M”) | 430(430か月) |
| “D” | 日数 | =DATEDIF(A2,B2,”D”) | 13053(日数) |
| “YM” | 年を無視した残月数 | =DATEDIF(A2,B2,”YM”) | 3(3か月) |
| “MD” | 年月を無視した残日数 | =DATEDIF(A2,B2,”MD”) | 15(15日) |
| “YD” | 年を無視した日数 | =DATEDIF(A2,B2,”YD”) | 105(今年の誕生日からの日数) |
「○歳○か月○日」のような表示を作るには「=DATEDIF(A2,TODAY(),”Y”)&”歳”&DATEDIF(A2,TODAY(),”YM”)&”か月”&DATEDIF(A2,TODAY(),”MD”)&”日”」のように3つのDATEDIFを&で連結します。社員台帳や会員管理の年齢表示でよく使われるパターンです。
EDATE関数・EOMONTH関数:月単位の加減算
EDATE関数は指定した日付からn か月後(前)の同日を返します。EOMONTH関数はn か月後(前)の月末日を返します。どちらも分析ツールアドインなしで使える関数です。
| 関数 | 構文 | 数式例(A2=2026/1/31) | 結果 |
|---|---|---|---|
| EDATE | =EDATE(開始日, 月数) | =EDATE(A2, 3) | 2026/4/30(3か月後の同日。4月に31日がないため末日調整) |
| EOMONTH | =EOMONTH(開始日, 月数) | =EOMONTH(A2, 1) | 2026/2/28(翌月の末日) |
| EOMONTH | =EOMONTH(開始日, 0) | =EOMONTH(A2, 0) | 2026/1/31(当月の末日) |
EDATE関数でマイナスの月数を指定すれば遡ることができます。「=EDATE(TODAY(), -6)」で6か月前の同日が求まります。有効期限の計算(「契約日の翌年同日の前日まで有効」など)でEDATEとDAYの組み合わせがよく使われます。
日付の表示形式を制御する:書式設定とTEXT関数
日付の見え方はセルの書式設定で制御します。また、日付を文字列として連結・表示したい場合はTEXT関数を使います。
セルの書式設定:日付の表示形式
セルの書式設定(Ctrl+1)の「日付」カテゴリには標準的な表示形式が揃っています。独自の形式を使いたい場合は「ユーザー定義」に書式コードを入力します。
| 書式コード | 表示例(2026年6月4日の場合) | 用途 |
|---|---|---|
| yyyy/mm/dd | 2026/06/04 | ISO形式・ゼロ埋めあり |
| yyyy年m月d日 | 2026年6月4日 | 日本語表記・ゼロ埋めなし |
| m/d | 6/4 | 同年内のシンプルな日付表示 |
| aaaa | 木曜日 | 曜日の漢字表示(月曜日~日曜日) |
| aaa | 木 | 曜日の短縮表示(月~日) |
| ddd | Thu | 英語略称(Sun, Mon…) |
| gee年m月d日 | R8年6月4日 | 元号表示(令和8年) |
TEXT関数で日付を文字列に変換する
TEXT関数を使うと、日付の値を指定した書式の文字列に変換できます。「&」で他のテキストと連結するときや、CONCATENATE関数の引数に日付を使いたいときに必要です。
TEXT関数の構文は「=TEXT(値, 書式文字列)」です。書式文字列は上表の書式コードと同じものを使います。
| 数式例 | 結果 | 解説 |
|---|---|---|
| =TEXT(TODAY(),”yyyy年m月d日”) | 2026年6月4日 | TODAY関数を日本語表記の文字列に変換 |
| =”作成日:”&TEXT(TODAY(),”yyyy/mm/dd”) | 作成日:2026/06/04 | 文字列と日付を連結 |
| =TEXT(TODAY(),”m月d日(aaa)”) | 6月4日(木) | 日付と曜日を一緒に表示 |
| =”期限:”&TEXT(A2,”yyyy年m月d日”) | 期限:2026年8月31日 | セルの日付を文字列化して連結 |
TEXT関数は文字列を返すため、文字列に変換した後の値はSUM・AVERAGEなどの数値計算に使えません。日付計算は変換前の日付セルを参照するように設計することが大切です。
日付関連のよくあるエラーと対処法
日付関数を使う際に起きがちなエラーや意図しない表示について、原因と対処法を整理します。
日付の差分が日付書式で表示される(例:1900/1/15)
日付が入ったセルどうしを引き算した結果のセルが日付書式のまま残っている場合、差分の数値(日数)が日付として表示されてしまいます。「1900/1/15」は15日間を意味するシリアル値「15」が日付形式で表示されている状態です。対処法はセルの書式設定を「標準」または「数値」に変更することです。
文字列として入力された日付が計算に使えない
「2026/6/4」と見えていても、セルに文字列として入力されている場合は日付として計算できません。確認方法はセルを選択してホームタブの書式欄を見ることです。「文字列」と表示されていれば文字列です。DATEVALUE関数を使うと文字列をシリアル値に変換できます。「=DATEVALUE(“2026/6/4”)」のように使います。
DATEDIF関数でエラーになる
DATEDIF関数は開始日が終了日より新しい場合に#NUM!エラーを返します。「誕生日よりも今日が未来である」という前提で動作するため、引数の順序(開始日→終了日)が逆にならないよう注意が必要です。また、単位に指定できる文字列(”Y”、”M”、”D”、”YM”、”MD”、”YD”)以外を入力すると#NUM!エラーになります。単位は必ずダブルクォートで囲んで記述します。
TODAY関数の結果が自動更新されない
計算方法が「手動」に設定されていると、ファイルを開いてもTODAY関数が更新されません。「数式」タブ→「計算オプション」→「自動」に設定することで解決できます。Excelのオプション設定でも変更できます。
MOS Excel試験での日付関数の出題パターンと攻略法
MOS Excel 365試験では日付関数は関数問題の中でも比較的出題頻度が高い分野です。TODAY・NOW・DATE・YEAR・MONTH・DAY・DATEDIFの各関数の構文と動作を正確に理解しておくことが得点のポイントです。
頻出問題の傾向
- パターン1:TODAY関数基本問題——「セルB2に今日の日付を入力する数式を作成してください」のようなシンプルな問題。TODAY()と入力するだけだが、Ctrl+;との違い(固定値か自動更新か)を問われることがある
- パターン2:経過日数・残日数の計算問題——「セルC2に今日からA2の日付までの残日数を求める数式を入力してください」のような引き算問題。書式設定を数値に変える操作もセットで確認される
- パターン3:DATE関数でのセル参照問題——「A1・B1・C1に入力された年・月・日の値を使って日付を作成し、D1に入力してください」というDATE関数の基本問題
- パターン4:YEAR・MONTH・DAY関数での分解問題——「A2の日付から年をB2に、月をC2に、日をD2に取り出してください」という問題
- パターン5:DATEDIF関数での年齢計算問題——「A2の生年月日と本日の日付から満年齢をB2に求めてください」というDATEDIF+”Y”の応用問題
間違えやすいポイントと対策
- 間違い1:TODAY()のカッコを忘れる——TODAY・NOW関数は引数なしでもカッコが必須。「=TODAY」と入力するとエラーになる
- 間違い2:日付の差が日付書式で表示されて気づかない——差分の結果を確認したときに「1900/1/xx」と表示されたら書式を数値に変更する。試験では書式変更もセットで求められる場合がある
- 間違い3:DATEDIF関数の第1引数と第2引数を逆にする——DATEDIF(開始日, 終了日, 単位)の順。年齢計算では生年月日が第1引数、TODAY()が第2引数
- 間違い4:DATE関数の引数を文字列で指定する——DATE関数の引数は数値(またはセル参照)で指定する。”2026″のようにクォートで囲む必要はない
- 間違い5:書式コードaaaa(曜日)とdddd(英語曜日)を混同する——日本語の曜日表示はaaaa(または短縮形のaaa)を使う。ddddは英語のFriday・Thursdayなどの表示
試験前に確認するポイントまとめ
| 確認ポイント | 内容 |
|---|---|
| TODAY関数の構文 | =TODAY()(引数なし・カッコ必須・自動更新) |
| NOW関数の構文 | =NOW()(引数なし・カッコ必須・日付+時刻を返す) |
| DATE関数の構文 | =DATE(年, 月, 日)(引数は数値またはセル参照) |
| 日付の差(経過日数) | =終了日セル-開始日セル → 結果は書式を「標準」か「数値」に変更 |
| DATEDIF関数の構文 | =DATEDIF(開始日, 終了日, 単位)(単位は”Y”/”M”/”D”/”YM”/”MD”/”YD”) |
| 満年齢の計算 | =DATEDIF(生年月日, TODAY(), “Y”) |
| 月末日の計算 | =DATE(YEAR(A2), MONTH(A2)+1, 0) または =EOMONTH(A2, 0) |
| n か月後の同日 | =EDATE(A2, n) |
| 曜日表示(日本語) | 書式コード:aaaa(木曜日)またはaaa(木) |
| 日付を文字列に変換 | =TEXT(日付値, “yyyy年m月d日”)など |
まとめ:DATE・TODAY・NOW関数で日付処理を自動化する
DATE・TODAY・NOW関数と関連する日付関数を使いこなすことで、手入力によるミスをなくし、日付処理を大幅に自動化できます。要点をまとめます。
- Excelの日付はシリアル値(1900年1月1日を1とする整数)で管理されているため、日付の引き算で経過日数が計算できる。書式を「標準」に変えると数値で表示される
- TODAY関数は引数なしで当日の日付を返し、ファイルを開くたびに自動更新される。固定値で入力したい場合はCtrl+;を使う
- NOW関数は日付と現在時刻を返す。INT(NOW())で日付のみ、NOW()-INT(NOW())で時刻のみを取り出せる
- DATE関数は「=DATE(年, 月, 日)」の構文で任意の日付を生成する。月・日のオーバーフロー(DATE(2026, 7, 0)→6月30日)を使うと月末日計算が簡単
- YEAR・MONTH・DAY関数は日付から年・月・日の数値をそれぞれ取り出す。DATE関数と組み合わせるとn か月後の同日など柔軟な日付計算ができる
- DATEDIF関数は2つの日付の差を年・月・日の単位で計算できる隠し関数。満年齢計算(”Y”)・年月日表示(”Y”+”YM”+”MD”の組み合わせ)に特に有用
- EDATE関数はn か月後の同日、EOMONTH関数はn か月後の月末日を返す。どちらも契約期限や締め切り日の計算に役立つ
- 日付をテキストと連結したい場合はTEXT関数で文字列に変換する。書式コード(yyyy年m月d日・aaaa・gee年など)を使って表示形式を制御できる
- MOS試験ではTODAY関数のカッコ必須・日付差分の書式変更・DATEDIFの引数順序・DATE関数のセル参照がよく問われる
当サイトでは、Excel・Word・PowerPoint・AccessのOffice操作やMOS試験対策に関する記事を多数発信しています。ぜひ他の記事もご覧ください。
