スプレッドシートのDATEDIF関数の使い方|日付の差を年月日で計算

スポンサーリンク

「入社日から今日まで何年何ヶ月か、パッと出せないかな?」。社員名簿や契約管理をしていると、こんな場面が出てきますよね。

日付の引き算で日数は出せますが、「3年6ヶ月」のような年月表示にするのは意外と面倒です。

GoogleスプレッドシートのDATEDIF関数を使えば、2つの日付の差を年・月・日の好きな単位で一発計算できます。

この記事では基本の書き方から、年齢の自動計算や勤続年数の「X年Yヶ月」表示まで、実務で使えるテクニックをまとめて紹介します。

DATEDIF関数とは?スプレッドシートで日付の差を求める関数

DATEDIF関数(読み方: デイトディフ関数)は、2つの日付の間隔を年・月・日の単位で計算する関数です。

名前は「date(日付)」と「difference(差)」を組み合わせた造語です。

通常の日付の引き算(=B1-A1)では結果が「日数」しか返りません。「1,278日」と出されても、それが何年何ヶ月なのかすぐにはわかりませんよね。

DATEDIF関数なら、第3引数の「単位」を切り替えるだけで年数・月数・日数を自由に取り出せます。年齢計算や勤続年数の算出に欠かせない関数ですよ。

NOTE

DATEDIF関数はGoogleスプレッドシートでは公式にサポートされています。Excelでも使えますが、Excelでは公式ドキュメントに記載されていない「非公式関数」の扱いです。

DATEDIF関数の書き方|構文と引数

基本構文

=DATEDIF(開始日, 終了日, 単位)

カッコの中に「開始日」「終了日」「単位」の3つを順番に入れます。引数はすべて必須です。

引数の詳細

引数必須/任意説明
開始日必須期間の開始となる日付
終了日必須期間の終了となる日付
単位必須結果の単位を指定する文字列(”Y”、”M”、”D”など)

開始日は終了日より前の日付を指定してください。開始日が終了日より後になると#NUM!エラーが発生します。

6つの単位の意味と使い分け

DATEDIF関数の最大のポイントは、第3引数の「単位」です。6種類あり、それぞれ返す値が異なります。

単位意味返す値
“Y”年数完了した年の数(端数切り捨て)
“M”月数完了した月の数(端数切り捨て)
“D”日数2つの日付の間の日数
“YM”年を除いた月数年の差を除いた残りの月数(0〜11)
“MD”月を除いた日数月の差を除いた残りの日数(0〜30)
“YD”年を除いた日数年の差を除いた残りの日数(0〜365)

上の3つ(Y/M/D)が「トータルの差」、下の3つ(YM/MD/YD)が「端数部分の差」です。この違いを押さえておくと迷わずに使えますよ。

DATEDIF関数の使い方|6つの単位を実例で確認

同じ日付ペアで6つの単位すべてを試してみましょう。開始日を「2020/4/1」、終了日を「2026/9/15」とします。

=DATEDIF("2020/4/1", "2026/9/15", "Y")   → 6
=DATEDIF("2020/4/1", "2026/9/15", "M")   → 77
=DATEDIF("2020/4/1", "2026/9/15", "D")   → 2358
=DATEDIF("2020/4/1", "2026/9/15", "YM")  → 5
=DATEDIF("2020/4/1", "2026/9/15", "MD")  → 14
=DATEDIF("2020/4/1", "2026/9/15", "YD")  → 167

結果を表で整理すると、各単位の違いがはっきりわかります。

単位数式結果読み方
“Y”=DATEDIF("2020/4/1","2026/9/15","Y")66年(7年目に届いていない)
“M”=DATEDIF("2020/4/1","2026/9/15","M")77トータル77ヶ月
“D”=DATEDIF("2020/4/1","2026/9/15","D")2358トータル2,358日
“YM”=DATEDIF("2020/4/1","2026/9/15","YM")56年と5ヶ月
“MD”=DATEDIF("2020/4/1","2026/9/15","MD")145ヶ月と14日
“YD”=DATEDIF("2020/4/1","2026/9/15","YD")1676年と167日

“YM”の「5」と”MD”の「14」を合わせると「6年5ヶ月14日」です。「X年Yヶ月Z日」の表示を作るときは、Y・YM・MDの3つを組み合わせて使います。

実務で使えるDATEDIF活用例

生年月日から年齢を自動計算する

人事名簿でよく使うパターンです。A2に生年月日が入っているとします。

=DATEDIF(A2, TODAY(), "Y")

TODAY関数は今日の日付を返す関数です。生年月日と今日の差を「年」の単位で求めるので、現在の満年齢が返ります。

たとえばA2が「1990/5/20」で今日が「2026/3/19」なら、結果は「35」です。5月20日を過ぎたら自動で「36」に変わりますよ。

TIP

社員が100人いても、数式を下にコピーするだけで全員の年齢が一括計算できます。手計算で年齢を更新する手間がなくなりますね。

勤続年数を「X年Yヶ月」形式で表示する

入社日がB2に入っているとして、勤続年数を「X年Yヶ月」の文字列で表示してみましょう。

=DATEDIF(B2, TODAY(), "Y") & "年" & DATEDIF(B2, TODAY(), "YM") & "ヶ月"

「Y」で年数を、「YM」で年を除いた月数を取り出し、文字列結合演算子(&)でつなげています。

B2が「2020/4/1」で今日が「2026/3/19」なら、結果は「5年11ヶ月」です。

さらに日数まで表示したい場合は、「MD」を追加します。

=DATEDIF(B2, TODAY(), "Y") & "年" & DATEDIF(B2, TODAY(), "YM") & "ヶ月" & DATEDIF(B2, TODAY(), "MD") & "日"

結果は「5年11ヶ月18日」のように表示されます。

契約の残り期間を計算する

契約終了日がC2に入っているとして、今日からの残り期間を求めてみましょう。

=DATEDIF(TODAY(), C2, "M") & "ヶ月" & DATEDIF(TODAY(), C2, "MD") & "日"

この場合はTODAY()を開始日、契約終了日を終了日にしています。C2が「2027/3/31」なら「12ヶ月12日」のように表示されます。

契約管理やリース期間の算出に便利ですよ。

DATEDIF関数のエラーと対処法

#NUM!エラー(開始日が終了日より後の場合)

DATEDIF関数でもっとも多いエラーです。開始日が終了日より後の日付になっていると発生します。

=DATEDIF("2026/9/15", "2020/4/1", "Y")   → #NUM!

対処法はシンプルです。引数の順番を確認して、開始日を終了日より前に指定してください。

IFERRORで安全にエラーを回避する

データに不備がある行でもエラー表示を防ぎたい場合は、IFERROR関数(エラーのとき代替値を返す関数)で囲みます。

=IFERROR(DATEDIF(A2, TODAY(), "Y"), "")

A2が空欄だったり不正な日付だったりしても、エラーの代わりに空白が表示されます。名簿のように大量の行がある場面では、IFERROR関数との組み合わせがおすすめです。

#VALUE!エラー(日付が文字列の場合)

日付のセルが文字列として入力されていると#VALUE!エラーになることがあります。セルの表示形式を「日付」に変更するか、DATE関数で日付データを作り直してください。

ExcelのDATEDIF関数との互換性

DATEDIF関数はGoogleスプレッドシートとExcelの両方で使えます。ただし扱いに違いがあるので注意してください。

項目GoogleスプレッドシートExcel
公式サポート公式関数として文書化非公式(ヘルプに記載なし)
数式の補完候補表示される表示されない
構文・引数同じ同じ
6つの単位すべて使えるすべて使える
“MD”単位の精度一部ケースで不正確な結果の報告あり同様の問題あり

Excelでは入力候補に表示されないため「存在しない関数」と思われがちですが、実際にはExcel 2000以降のすべてのバージョンで動作します。

スプレッドシートからExcelにファイルを変換しても、DATEDIF関数の数式はそのまま動作します。チーム内でファイル形式が混在していても安心ですよ。

WARNING

“MD”単位は、一部の日付の組み合わせで不正確な結果を返すことがあります。厳密な日数計算が必要な場合は、DAY関数を使った手動計算を検討してください。

YEAR関数を使った代替手段との比較

DATEDIF関数を使わなくても、YEAR関数やMONTH関数の引き算で年齢を求める方法もあります。

=YEAR(TODAY()) - YEAR(A2)

この数式でも年の差は出ますが、誕生日を迎えたかどうかを考慮しません。たとえば「1990/12/1」生まれの人は、2026年3月の時点ではまだ35歳ですが、YEAR関数の引き算では「36」と出てしまいます。

DATEDIF関数なら「完了した年数」を正確に返すので、満年齢の計算にはDATEDIF関数を使ってください。

方法数式例メリットデメリット
DATEDIF関数=DATEDIF(A2,TODAY(),"Y")満年齢が正確関数名が長い
YEAR引き算=YEAR(TODAY())-YEAR(A2)シンプル誕生日前でも1歳多く出る

まとめ

DATEDIF関数は、2つの日付の差を年・月・日の単位で計算する関数です。

ポイントを整理します。

  • 構文は =DATEDIF(開始日, 終了日, 単位) の3引数
  • 6つの単位のうち、Y/M/Dが「トータルの差」、YM/MD/YDが「端数部分の差」
  • 年齢計算は =DATEDIF(生年月日, TODAY(), "Y") が定番
  • 勤続年数は「Y」と「YM」を&でつないで「X年Yヶ月」表示
  • 開始日 > 終了日で#NUM!エラーが出るので、IFERRORで囲むと安全
  • Excelでも同じ構文で使える(非公式だが全バージョンで動作)

まずは =DATEDIF(A2, TODAY(), "Y") で年齢計算から試してみてください。

タイトルとURLをコピーしました