今回は、ExcelのDATEDIF関数を使用して、生年月日から現在の年齢や、指定した期間の年数・月数・日数を正確に計算する方法について紹介します。
DATEDIF関数とは何か
Excelで社員名簿や顧客リストを管理している際、「生年月日」のデータから「現在の年齢」を自動的に求めたいという場面は非常に多く存在します。
単純に「今日の日付から生年月日を引き算して、365で割る」といった計算式を作ってしまうと、うるう年の影響などで1日や2日のズレが生じ、誕生日を迎えていないのに年齢が1つ増えてしまうといった致命的なミスに繋がります。
このような期間の計算を、年月日のカレンダーのルールに則って正確に行ってくれるのが「DATEDIF(デートディフ)関数」です。
DATEDIF関数は、「2つの日付の間の期間(Date
Difference)」を、指定した単位(年、月、日)で算出する専用の関数であり、年齢計算をはじめ、勤続年数の算出や、契約の残り月数の計算など、ビジネスにおいて欠かせない役割を果たします。
関数の構文と特異な性質
DATEDIF関数の構文は以下のようになっています。
=DATEDIF(開始日, 終了日, “単位”)
- 開始日: 期間の始まりとなる日付(生年月日や入社日など)が入力されているセルを指定します。
- 終了日:
期間の終わりとなる日付(今日の日付や退職日など)を指定します。現在の年齢を常に最新の状態で求めたい場合は、ここにTODAY関数(=TODAY())を組み合わせます。 - 単位: どのような単位で期間を求めるかを、ダブルクォーテーションで囲んだアルファベットで指定します(後述)。
なお、DATEDIF関数はExcelの関数の挿入ダイアログボックスや、数式入力時の予測候補(オートコンプリート)には表示されないという特殊な性質を持っています。
これは、他の表計算ソフト(Lotus 1-2-3など)との互換性を保つために用意されている隠し関数だからです。
予測が出ないため「=DATEDIF(」とキーボードからすべて手打ちで入力する必要があります。
単位(戻り値の種類)の選び方と活用法
DATEDIF関数の第3引数である「単位」には、計算したい内容に合わせて6種類のアルファベット(またはその組み合わせ)を指定します。
それぞれの単位がどのような数値を返すのかを理解しておくことが重要です。
“Y”、”M”、”D”の基本単位
最も基本的な3つの単位です。
- “Y” (Year):
開始日から終了日までの「満の年数」を求めます。年齢や勤続年数を計算する際に使用します。誕生日が来ていなければ年数は加算されないため、正確な満年齢が算出されます。 - “M” (Month):
開始日から終了日までの「満の月数」を求めます。「契約から何ヶ月経過したか」といった累計の月数を計算する場合に使用します。 - “D” (Day):
開始日から終了日までの「総日数」を求めます。単純な引き算(終了日-開始日)と同じ結果になります。
“YM”、”YD”、”MD”の複合単位
年や月をまたいだ端数を求めるための単位です。
- “YM” (Year Month):
年数を無視して、開始日から終了日までの「1年未満の月数(0〜11ヶ月)」を求めます。「勤続5年3ヶ月」の「3ヶ月」の部分を計算する際に使用します。 - “YD” (Year Day): 年数を無視して、開始日から終了日までの「1年未満の日数」を求めます。
- “MD” (Month Day):
年数と月数を無視して、開始日から終了日までの「1ヶ月未満の日数(端数の日数)」を求めます。「勤続5年3ヶ月と10日」の「10日」の部分を計算する際に使用します。
DATEDIF関数を活用する具体的な場面
各単位の特性を組み合わせることで、実務で求められる複雑な期間の表現が可能になります。
現在の正確な満年齢を計算する
社員名簿において、生年月日(セルA2)から、ファイルを開いたその日時点の満年齢を求めたい場合は、「”Y”」と「TODAY関数」を組み合わせます。
=DATEDIF(A2, TODAY(), “Y”)
この数式をセルに入力するだけで、常に最新の正確な年齢が表示されます。
「TODAY()」の部分を、特定の基準日(例:来年の4月1日時点での年齢を知りたい場合など)が入力された別のセルに置き換えることも可能です。
「◯年◯ヶ月」という形式で勤続年数を表示する
人事や総務の業務では、入社日(セルB2)から現在までの期間を「勤続10年5ヶ月」のように、年と月を組み合わせて表示させたいケースがよくあります。
この場合は、DATEDIF関数を2つ使い、「&(アンパサンド)」で文字と結合して一つの数式にまとめます。
=DATEDIF(B2, TODAY(), “Y”) & “年” & DATEDIF(B2, TODAY(), “YM”)
& “ヶ月”
前半のDATEDIF関数で満の年数(10)を計算し、「年」という文字をくっつけます。
後半のDATEDIF関数で、単位に「”YM”」を指定して年数を除いた端数の月数(5)を計算し、「ヶ月」という文字をくっつけます。
これにより、別々のセルに計算結果を出さなくても、一つのセル内に美しく整形された勤続期間を表示させることができます。
DATEDIF関数を使用する際の注意点
非常に便利な関数ですが、いくつか注意すべき落とし穴が存在します。
開始日と終了日の順番間違い
DATEDIF関数で最も多いエラーの原因は、第1引数の「開始日」と第2引数の「終了日」を逆に指定してしまうことです。
必ず「古い日付(開始日)」、「新しい日付(終了日)」の順番で指定しなければなりません。
もし「開始日」に「終了日」よりも未来の日付を指定してしまうと、「#NUM!」というエラーが表示されて計算ができなくなります。
単位”MD”の計算上のバグについて
Microsoftの公式ドキュメントでも警告されていますが、単位に「”MD”(1ヶ月未満の端数の日数)」を指定した場合、特定の年月の組み合わせにおいて、マイナスの数値が返されたり、計算結果が不正確になったりする既知のバグが存在します。
年齢や勤続年数を「◯年◯ヶ月」まで求める用途(”Y”や”YM”)であれば問題なく機能しますが、「◯年◯ヶ月◯日」まで厳密に日数の端数を求めたい場合には、DATEDIF関数の”MD”単位だけに頼るのはリスクがあります。
日数の端数まで正確に算出する必要がある厳しい業務では、YEAR関数、MONTH関数、DAY関数などを複雑に組み合わせた代替の計算式を使用することが推奨されています。
まとめ
ExcelのDATEDIF関数を使用して、生年月日から年齢を計算したり、2つの日付の間の期間を年・月・日の単位で求めたりする方法について解説しました。
「=DATEDIF(開始日, 終了日,
“単位”)」という構文を手入力することで、うるう年などの暦の複雑なルールを自動で処理し、正確な満年齢や勤続期間を瞬時に算出できます。
特に、常に今日の日付を取得するTODAY関数との組み合わせや、「”Y”」と「”YM”」をアンパサンドで繋いで「◯年◯ヶ月」という表現を作るテクニックは、人事や労務のデータ管理において必須のスキルです。
予測候補に表示されないという隠し関数ならではの特徴や、古い日付を先に指定するというルールをしっかり押さえておくことが重要です。
手計算での年齢の数え間違いや、単純な引き算によるズレを防ぐためにも、DATEDIF関数を活用して正確で信頼性の高い名簿やスケジュール表を作成してみてはいかがでしょうか。