Excelで年齢や勤続年数、契約の残り日数を出したいのに、式が複雑で手が止まっていませんか。DATEDIF関数を使えば、開始日と終了日を指定するだけで期間計算を自動化できます。この記事では、基本構文から実務でそのまま使える完成形の数式、よくあるエラーの直し方まで、初心者にもわかりやすく整理して解説します。
【結論】DATEDIF関数の構文と単位引数の一覧

DATEDIF関数は、2つの日付の差を年・月・日で求めるための関数です。
まずは構文と単位引数の意味を覚えるだけで、年齢計算も勤続年数計算もほぼ対応できます。
項目内容構文DATEDIF(開始日, 終了日, ‘単位’)主な用途年齢、勤続年数、契約期間、経過日数注意点開始日が終了日より後だとエラー
DATEDIF関数の基本構文
DATEDIF関数の基本形は、DATEDIF(開始日, 終了日, ‘単位’)です。
開始日には古い日付、終了日には新しい日付を入れるのが原則で、順序が逆だと #NUM! エラーになります。
たとえば生年月日がA2、今日の日付で年齢を出したいなら、=DATEDIF(A2,TODAY(),’Y’)という形で使います。
※ 記事内の数式はJSON出力の都合で単位をシングルクォート表記しています。実際にExcelへ入力する際は単位引数を引用符で囲んでください。
単位引数(Y/M/D/YM/MD/YD)の意味と使い分け
単位引数は全部で6種類あり、何を知りたいかで選び方が変わります。
単位意味向いている用途Y満年数年齢、勤続年数M満月数総月数の把握D総日数経過日数、残り日数YM年を除いた残り月数〇年〇ヶ月表示MD月を除いた残り日数〇年〇ヶ月〇日表示YD年を除いた日数今年の誕生日からの経過把握
実務でよく使うのは、Y・YM・Dの3つです。
DATEDIFとは?関数一覧に表示されない「隠し関数」の正体

DATEDIFは、Excelで今も使えるのに関数一覧や入力候補で目立たない、いわゆる隠し関数です。
ただし非対応という意味ではなく、現在のExcel 365やExcel 2021でも利用可能なので、期間計算では今でも実務でよく使われます。
DATEDIFが隠し関数である理由
DATEDIFは、もともと古い表計算ソフトとの互換性を保つ目的で残されている関数です。
そのためExcelの関数一覧では前面に出ませんが、Microsoftも公式に解説ページを用意しており、通常利用自体に問題はありません。
参考:Microsoft公式のDATEDIF関数
DAYS関数との違い
DAYS関数は日数差だけを求めるシンプルな関数で、DAYS(終了日, 開始日)の形で使います。
一方のDATEDIFは、年・月・日を細かく分けて計算できるため、年齢や勤続年数のような表現に向いています。
関数得意な計算おすすめ用途DATEDIF年・月・日の内訳年齢、勤続年数DAYS総日数のみ期限管理、残日数
参考:Microsoft公式のDAYS関数
【実践1】年齢計算|生年月日から現在の年齢を自動算出

年齢計算でDATEDIFを使う最大のメリットは、今日の日付を基準に満年齢を自動更新できることです。
一度式を入れておけば、誕生日を迎えた日に年齢が自動で1つ増えるため、名簿や顧客管理表の手入力が不要になります。
TODAY関数と組み合わせて満年齢を計算する
満年齢を求める最も基本的な式は、=DATEDIF(A2,TODAY(),’Y’)です。
A2に生年月日が入っていれば、今日時点での満年齢を年単位で返します。
たとえば1995年4月10日生まれの人は、誕生日到来前と後で結果が自動的に切り替わるため、手作業での更新ミスを防げます。
「〇歳」表示にする文字列結合テクニック
年齢を数値だけでなく見やすい形にしたいなら、文字列結合を使って=DATEDIF(A2,TODAY(),’Y’)&’歳’と入力します。
これで結果が 31 のような数値ではなく、31歳という表示になり、一覧表でも意味がひと目で伝わります。
他の列で計算に再利用する予定があるなら、表示用列と計算用列を分けると管理しやすくなります。
【実践2】勤続年数計算|入社日から「〇年〇ヶ月」形式で表示

勤続年数の計算では、総月数ではなく、何年何ヶ月と分けて表示したい場面が多くあります。
DATEDIFなら年数と残り月数を別々に出せるため、人事台帳や社内申請書でそのまま使える表記を作れます。
勤続年数を「〇年〇ヶ月」で表示する数式
入社日がB2にある場合、=DATEDIF(B2,TODAY(),’Y’)&’年’&DATEDIF(B2,TODAY(),’YM’)&’ヶ月’で表示できます。
たとえば3年8ヶ月在籍している社員なら、結果はそのまま 3年8ヶ月 となります。
単純に月数だけほしい場合は M、見やすい表示がほしい場合は Y と YM を組み合わせるのが基本です。
「〇年〇ヶ月〇日」フル表示の完成形数式
日数まで含めるなら、=DATEDIF(B2,TODAY(),’Y’)&’年’&DATEDIF(B2,TODAY(),’YM’)&’ヶ月’&DATEDIF(B2,TODAY(),’MD’)&’日’という形が手軽です。
この式は入社からの期間を 5年2ヶ月14日 のように表示できるため、福利厚生や表彰基準の確認にも便利です。
ただし MD は月末付近で期待と異なる結果になることがあるため、厳密な判定が必要な帳票では後述の注意点も確認してください。
0年・0ヶ月を非表示にする応用テクニック
見た目をすっきりさせたいなら、IF関数で 0 の単位だけ消す方法が有効です。
たとえば年と月を消したい場合は、=IF(DATEDIF(B2,TODAY(),’Y’)>0,DATEDIF(B2,TODAY(),’Y’)&’年’,”)&IF(DATEDIF(B2,TODAY(),’YM’)>0,DATEDIF(B2,TODAY(),’YM’)&’ヶ月’,”)のように組みます。
入社3ヶ月の社員なら 0年3ヶ月 ではなく 3ヶ月 と表示でき、一覧表の可読性が上がります。
【実践3】契約期間・経過日数の計算|残り日数を自動算出

DATEDIFは年齢や勤続年数だけでなく、契約や案件の期限管理にも使えます。
特に残り日数や経過日数を自動表示できると、更新漏れや納期遅延の防止に直結します。
契約終了日までの残り日数を計算する
契約終了日がC2にあるなら、=IF(C2>=TODAY(),DATEDIF(TODAY(),C2,’D’),0)で残り日数を求められます。
この式なら終了日を過ぎた契約でも #NUM! にならず、0日として扱えます。
たとえば更新期限の30日前に色付けする条件付き書式と組み合わせれば、管理漏れを早めに見つけやすくなります。
プロジェクト開始からの経過日数を算出する
開始日がD2なら、=DATEDIF(D2,TODAY(),’D’)で開始から今日までの経過日数を出せます。
案件着手から45日、90日、180日といった節目管理がしやすくなるため、進捗会議の資料作成にも便利です。
月数や年数も併記したい場合は、D と YM を別列で持たせると分析しやすくなります。
DATEDIFでよくあるエラーと解決策

DATEDIFは便利ですが、日付の入力状態や順序が少しずれるだけでエラーになりやすい関数です。
原因はほぼ決まっているので、#NUM! と #VALUE!、そして MD のクセを押さえれば、ほとんどのトラブルはすぐ解決できます。
#NUM!エラー:開始日と終了日の順序が逆
#NUM! エラーは、開始日より終了日のほうが前になっているときに出やすいエラーです。
たとえば =DATEDIF(TODAY(),A2,’Y’) のように、未来日や過去日の置き方を逆にすると発生します。
開始日が古い日付、終了日が新しい日付になっているかを確認し、必要なら IF 関数で条件分岐させると安全です。
#VALUE!エラー:日付が文字列として認識されている
#VALUE! エラーは、見た目は日付でも実際には文字列として保存されているときに起こります。
セルを左寄せにして入力したり、2026/03/24 の前後に余分な空白がある場合は、日付として認識されないことがあります。
対処法は、セルの表示形式を日付に直す、DATEVALUE関数を使う、またはデータ区切り位置機能で再変換することです。
MD単位の計算結果がおかしい場合の対処法
MD は月をまたぐ日数だけを返す便利な単位ですが、月末やうるう年付近で直感とズレることがあります。
Microsoftも MD の利用には注意を促しているため、契約書や人事評価のように厳密さが必要な場面では総日数で管理する方法が安全です。
どうしても日まで分けたい場合は、補助列で年数と月数を分け、日数は DATEDIF の D や DAYS 関数で別管理すると安定します。
よくある質問(FAQ)

DATEDIFはExcel 365/2021でも使えますか?
Q. DATEDIFはExcel 365やExcel 2021でも使えますか。
A: 使えます。関数一覧で目立たないだけで、現在のExcelでも入力すれば動作します。
参考:Microsoft公式ヘルプ
Googleスプレッドシートでも同じ数式が使えますか?
Q. Googleスプレッドシートでも同じ考え方で使えますか。
A: ほぼ同じ構文で使えます。Y、M、D、YM、MD、YD もサポートされています。
参考:Google公式のDATEDIF説明
DATEDIFを使わずに期間計算する方法はありますか?
Q. DATEDIF以外で期間計算する方法はありますか。
A: あります。日数だけなら DAYS、満年齢なら YEAR と TODAY を組み合わせる方法でも対応できます。
MD の精度が気になる場合は、DATEDIFを分割して使うか、日数だけ別関数で求める構成のほうが安心です。
まとめ

DATEDIF関数を使えば、Excelの期間計算はかなり効率化できます。
年齢計算は DATEDIF(生年月日,TODAY(),’Y’) が基本勤続年数は Y と YM の組み合わせで見やすく表示できる残り日数や経過日数は D で管理すると実務で使いやすい#NUM! は日付順序、#VALUE! は文字列日付を疑うMD は便利だが厳密管理では注意が必要
まずは自分の表で、年齢計算か勤続年数計算のどちらか1つをDATEDIFに置き換えてみてください。


コメント