Excelで「生年月日から年齢を自動計算したい」「2つの日付の間の年数・月数・日数を出したい」という場面で活躍するのがDATEDIF関数です。
「DATEDIF関数が入力候補に出てこない」「使えないと言われた」という方も多いでしょう。
本記事では、DATEDIF関数の正しい書き方・引数の意味・各単位の計算例・使えない場合の対処法まで、わかりやすく解説していきます。
DATEDIF関数とは「2つの日付の期間を年・月・日単位で計算するExcel関数」である
それではまず、DATEDIF関数の基本的な仕組みと注意点を解説していきます。
DATEDIF関数の構文:=DATEDIF(開始日, 終了日, 単位)
開始日:期間の始まりの日付(またはセル参照)
終了日:期間の終わりの日付(開始日より後でないとエラー)
単位:”Y”(年数)・”M”(月数)・”D”(日数)・”YM”・”YD”・”MD”(端数)
重要:DATEDIF関数はExcelの数式オートコンプリート(候補リスト)に表示されない「非公式・互換性関数」だが、現在も使用可能。
DATEDIF関数が「使えない」「出てこない」というのは、候補リストに表示されないためです。
手入力で「=DATEDIF(」と打てば正常に動作します。
各単位の意味と計算結果
DATEDIF関数の第3引数(単位)には6種類の文字列を指定できます。
“Y”:開始日から終了日までの満年数(0以上の整数)
“M”:開始日から終了日までの総月数(年をまたいでカウント)
“D”:開始日から終了日までの総日数
“YM”:満年数を除いた残りの月数(0〜11)
“YD”:満年数を除いた残りの日数(0〜365)
“MD”:満月数を除いた残りの日数(0〜30)
「〇歳〇ヶ月〇日」という表示を作るには “Y”・”YM”・”MD” を組み合わせます。
年齢計算の実践例
最も多い用途が年齢計算です。
A1:生年月日(例:1990/5/10)
=DATEDIF(A1, TODAY(), “Y”) → 満年齢(整数)
=DATEDIF(A1, TODAY(), “Y”)&”歳”&DATEDIF(A1, TODAY(), “YM”)&”ヶ月”&DATEDIF(A1, TODAY(), “MD”)&”日”
→ “33歳7ヶ月15日” のような表示
TODAY()を使うことで、ファイルを開くたびに今日の日付で自動更新される年齢計算になります。
勤続年数・期間計算への応用
入社日から現在までの勤続年数・月数も同様に計算できます。
B1:入社日(例:2018/4/1)
=DATEDIF(B1, TODAY(), “Y”)&”年”&DATEDIF(B1, TODAY(), “YM”)&”ヶ月”
→ “5年11ヶ月” のような勤続期間の表示
プロジェクト期間・契約残存期間・資格の有効期限管理など、ビジネスの様々な期間計算に応用できます。
DATEDIF関数が使えない場合の対処法
続いては、DATEDIF関数が正しく動作しない場合の対処法を確認していきましょう。
NUM!エラーへの対処
DATEDIF関数で最も多いエラーが#NUM!エラーです。
これは「開始日 > 終了日」になっている場合に発生します。
年齢計算で生年月日が今日より後になっていないか確認し、必要に応じてIF関数で条件分岐を追加します。
=IF(A1>TODAY(), “未来の日付です”, DATEDIF(A1, TODAY(), “Y”))
→ 開始日が今日より後の場合にエラーを防ぐ
DATEDIF関数の代替方法
DATEDIF関数に依存せずに年齢計算する代替方法として、YEARFRAC関数・INT関数の組み合わせがあります。
=INT((TODAY()-A1)/365.25) → 簡易的な満年齢(うるう年を0.25で近似)
=INT(YEARFRAC(A1, TODAY())) → YEARFRACを使った満年齢
どちらも完全には一致しない場合があるため、正確な年齢計算にはDATEDIF関数の “Y” 単位を使う方が確実です。
Google スプレッドシートでのDATEDIF
Google スプレッドシートでもDATEDIF関数は使えます。
構文はExcelと同じですが、Google スプレッドシートでは関数の候補リストに表示されるため、より使いやすい環境です。
DATEDIF関数の実践的な応用例
続いては、ビジネスや日常での実践的な応用例を確認していきましょう。
| 用途 | 数式 | 結果の例 |
|---|---|---|
| 満年齢計算 | =DATEDIF(生年月日, TODAY(), “Y”) | 33(歳) |
| 勤続年月 | =DATEDIF(入社日, TODAY(), “Y”)&”年”&DATEDIF(入社日, TODAY(), “YM”)&”ヶ月” | 5年11ヶ月 |
| 契約残存日数 | =DATEDIF(TODAY(), 契約満了日, “D”) | 45(日) |
| 月齢計算 | =DATEDIF(生年月日, TODAY(), “M”) | 407(ヶ月) |
条件付き書式との組み合わせ
DATEDIF関数で計算した残存日数・年齢などを条件付き書式と組み合わせることで、期限が近づいたセルを自動で色分けする管理表が作れます。
契約更新管理・定期点検スケジュール・社員の定年管理など、実務での活用範囲は非常に広いです。
まとめ
本記事では、DATEDIF関数の構文・各単位の意味・年齢・勤続期間・期間計算への応用・エラー対処法を解説してきました。
DATEDIF関数は候補リストに出ない「隠れた関数」ですが、手入力で使えば年齢・勤続期間・契約残存日数など様々な期間計算に対応できる強力なツールです。
TODAY関数・IF関数・条件付き書式との組み合わせで、実務に役立つ日付管理システムを構築してみてください。