「入社日から今日まで何年何ヶ月か、パッと出せないかな?」。社員名簿や契約管理をしていると、こんな場面が出てきますよね。
日付の引き算で日数は出せますが、「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") | 6 | 6年(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") | 5 | 6年と5ヶ月 |
| “MD” | =DATEDIF("2020/4/1","2026/9/15","MD") | 14 | 5ヶ月と14日 |
| “YD” | =DATEDIF("2020/4/1","2026/9/15","YD") | 167 | 6年と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") で年齢計算から試してみてください。
