人事・総務の仕事では「入社日から今日までの勤続年数は何年何ヶ月か」「生年月日から満年齢は何歳か」といった、2つの日付の差を計算する場面が頻繁に出てきます。手計算やカレンダーを数えて求めることもできますが、社員数が多くなるほど非現実的です。この計算を1本の数式で済ませてくれるのがDATEDIF関数ですが、Excelの数式一覧やヘルプの目立つ場所には載っておらず、初めて使う人ほど「本当に存在する関数なのか」と不安になりがちです。
DATEDIFが「隠し関数」と呼ばれる理由
DATEDIFはセルに「=DATEDIF」と入力しても、SUMやVLOOKUPのように候補が自動で表示されません。これはDATEDIFがExcelの関数一覧・入力補完・ヘルプに正式には掲載されていない、いわゆる非公式(隠し)関数として扱われているためです。もともとLotus 1-2-3との互換性のために残された関数で、マイクロソフトは長年ドキュメント化していませんでした。とはいえ動作自体はExcel 2003以降のほぼすべてのバージョンで安定しており、実務で使う分には問題ありません。候補が出ないことに驚いて「使えない関数だ」と誤解しないよう、スペルミスなく手入力する関数だと覚えておくと安心です。
基本の書き方と3つの単位
DATEDIFは「開始日」「終了日」「単位」の3つの引数を取ります。単位を切り替えることで、年数・月数・日数のどれを求めたいかを指定します。
例:A1セルの入社日から今日までの満勤続年数を求める場合
=DATEDIF(A1, TODAY(), "Y")
"Y"
- 満年数を求める
- 勤続年数、満年齢の算出に使用
"M"
- 満月数を求める
- ローン返済月数などに使用
"D"
- 日数を求める
- 契約日数、経過日数などに使用
実務ではさらに「YM」(1年未満の月数)、「YD」(1年未満の日数)という単位もよく使われます。たとえば「勤続5年3ヶ月」のように年と月を両方表示したい場合は、"Y"単位と"YM"単位の2つのDATEDIFを組み合わせ、TEXT関数などで「5年3ヶ月」という文字列に整形します。
実務でのよくある使用シーン
人事・総務担当者であれば、社員名簿の入社日列からDATEDIFで勤続年数を自動計算し、永年勤続表彰や退職金計算の基礎資料に使うケースが典型的です。経理担当者であれば、契約開始日から満了日までの契約期間を月数で算出し、按分計算の根拠として使う場面があります。総務担当者であれば、従業員の生年月日から満年齢を計算し、社会保険の年齢要件(40歳、60歳、65歳など)の判定に利用することもよくあります。いずれも「今日の日付」を基準にする場合はTODAY関数と組み合わせるのがポイントです。
DATEDIFでよくあるエラー・トラブルと対処法
DATEDIFで最もよく遭遇するエラーです。主な原因は次の2つです。
- 開始日が終了日より後(未来)の日付になっている
- 開始日または終了日のセルが、日付ではなく文字列として入力されている
対処法として、まず数式バーで開始日・終了日の前後関係を確認してください。他システムから取り込んだ日付が文字列扱いになっているケースも多いため、セルが左寄せ表示になっていないか(=文字列扱いのサイン)も合わせてチェックしましょう。
YM単位は「1年未満の月数」を求めるものですが、日にちの繰り上がり処理を誤解しているケースがあります。
月末日を開始日にすると、月をまたぐ計算で誤差が出やすくなります。厳密な日数管理が必要な場合は、"YM"単独ではなく"M"単位や"D"単位との併用で結果を検算することをおすすめします。
前述の通りDATEDIFは入力補完に表示されない仕様です。エラーではありません。
「=DATEDIF(」まで入力してもポップアップのヒントが出ないため不安になりますが、スペルミスなく最後まで入力しEnterを押せば正しく計算されます。心配な場合は一度セルに計算結果が表示されるか確認してから、他のセルにコピーして使いましょう。
初心者がつまずきやすいポイントとコツ
- 単位は必ず半角のダブルクォーテーションで囲む。"Y"、"M"、"D"、"YM"、"YD"のいずれも文字列として指定するため、クォーテーションを忘れるとエラーになります。
- 「今日時点」の年数を出したいときはTODAY()と組み合わせる。終了日を固定の日付にしてしまうと、翌日以降に開いたときの勤続年数が古いままになってしまいます。
- 年齢や勤続年数は「Y」単位が基本。「M」単位で計算した月数を12で割って年数に丸めようとすると、誕生日前後の端数処理でズレが生じるため、素直に"Y"単位を使うのが安全です。
- 結果の表示形式は自動で「数値」になる。日付として表示されてしまう場合は、セルの表示形式を「標準」または「数値」に変更してください。
まとめ
DATEDIFは入力補完に出てこないため最初は戸惑う関数ですが、勤続年数・満年齢・契約期間といった「2つの日付の差」を求める場面では非常に頼りになります。単位を"Y""M""D""YM""YD"の中から目的に合わせて選び、開始日と終了日の前後関係さえ間違えなければ、#NUM!エラーに悩まされることもありません。TODAY関数と組み合わせて「今日時点」の年数を自動更新できるようにしておくと、名簿の更新作業もぐっと楽になります。数式を一から組み立てるのが不安な方は、下のツールで日本語の空欄を埋めるだけで数式を作成できます。
よくある質問
関連記事
- NETWORKDAYS関数で稼働日数(営業日数)を計算する方法
- YEAR・MONTH・DAY関数の使い方
- COUNTIFS関数で複数条件を数える方法
- EDATE・EOMONTH関数で契約更新日・支払期日を自動計算する方法