ExcelのDATEDIF関数:2つの日付間の年数・月数・日数を計算
ExcelのDATEDIF関数を使って2つの日付から満年齢や勤続年数、月数、日数を計算する方法を解説。単位コード一覧やオートコンプリートに出ない仕様、mdのバグへの対処法まで網羅。
著者 Ayoub Farid · · 3 分で読めます
DATEDIF(デイトディフ)関数は、2つの日付の間にある「満年数」「満月数」「日数」を計算するExcel関数です。年齢や勤続年数の計算における定番の数式として広く使われています。不思議なことに、Excelの数式オートコンプリート(入力候補)には表示されませんが、すべてのバージョンのExcelやGoogleスプレッドシートで問題なく動作します。
構文
=DATEDIF(start_date, end_date, unit)
| 単位(unit) | 戻り値 |
|---|---|
| "y" | 満年数 |
| "m" | 満月数 |
| "d" | 日数 |
| "ym" | 1年未満の端数月数 |
| "md" | 1ヶ月未満の端数日数 |
| "yd" | 1年未満の端数日数 |
年齢の計算
=DATEDIF(B2,TODAY(),"y")
勤続年数と月数の計算
=DATEDIF(B2,TODAY(),"y")&" years, "&DATEDIF(B2,TODAY(),"ym")&" months"
→ "4 years, 7 months"
開始日は終了日より前である必要があります
開始日(start_date)が終了日(end_date)よりも未来の日付になっている場合、DATEDIF関数は #NUM! エラーを返します。IFERROR関数でエラーを回避するか、参照しているセルの日付の前後関係を確認してください。
「md」指定時の注意点(不具合)
マイクロソフトの公式ドキュメントにも記載されている通り、単位に "md" を指定すると、特定の日付の組み合わせで正しくない計算結果が返される既知の不具合があります。給与計算や法務関連など、厳密な端数日数が求められる実務では、別の数式(例:=end-EDATE(start,DATEDIF(start,end,"m")) など)を使って算出することをおすすめします。
日数だけなら単純な引き算で十分
全体の経過日数を求めるだけであれば、DATEDIF関数を使わずに通常の引き算で計算できます。
=C2-B2
土日や祝日を除いた稼働日数を求めたい場合は、NETWORKDAYS関数を使用してください。
よくある質問
なぜExcelの入力候補にDATEDIF関数が表示されないのですか?
Lotus 1-2-3との互換性を維持するために残されている古い仕様(レガシー関数)であるため、入力時のオートコンプリート一覧には表示されません。関数名をキーボードで直接手入力すれば、問題なく動作します。
Excelで年齢を計算するにはどうすればよいですか?
=DATEDIF(birthdate,TODAY(),"y") を使用します。詳しくは年齢の計算方法をご覧ください。
DATEDIF関数で #NUM! エラーが出る原因は何ですか?
開始日が終了日よりも後の日付に設定されていることが原因です。
DATEDIF関数はGoogleスプレッドシートでも使えますか?
はい、Googleスプレッドシートでもまったく同じ単位コードで利用可能です。