概要
2つの日付の「満年数(端数切り捨ての年数差)」を最短で求めるなら、DATEDIF関数の “y” を使います。”y” は開始日から終了日までに“完全に経過した年”だけを返します。年次評価、勤続年数、契約年数など、年単位の集計に向いています。開始日が終了日より後だとエラーになる点に注意してください。
基本の使い方
書式
=DATEDIF(開始日, 終了日, "y")
開始日と終了日はセル参照や DATE/TODAY の日付が使えます。”y” は「満年数」を返すため、終了日の“月日”が開始日の“月日”に到達していない場合、その年は数えられません。
例
=DATEDIF("2018/04/10","2025/12/17","y") // 7
2018/04/10 → 2025/12/17 は“満8年”に見えますが、開始の月日を基準に考えると既に8年目に突入済みのため 7 + 端数月日となり、”y” は 7 を返します。
具体例
セル参照で年数差を取得
=DATEDIF(A2,B2,"y")
A2が「2010/07/01」、B2が「2025/06/30」なら結果は「14」。翌年同月同日(7/1)にまだ届いていないため満15年ではなく14年です。
今日までの満年数
=DATEDIF(C2,TODAY(),"y")
入社日C2から今日までの“満年数”を返します。人事の勤続年数表示にそのまま使えます。
誕生日から年齢(満年齢)
=DATEDIF(D2,TODAY(),"y")
D2が誕生日なら、”y” で満年齢が取得できます。
応用テンプレート
年・月・日を分解して「◯年◯か月◯日」を表示
=DATEDIF(開始,終了,"y") & "年" &
DATEDIF(開始,終了,"ym") & "か月" &
DATEDIF(開始,終了,"md") & "日"
“y” は満年、”ym” は満年を除いた満月、”md” は満年+満月を除いた残日です。
逆順でも安全に(開始・終了の入れ替わり対策)
=DATEDIF(MIN(E2,F2),MAX(E2,F2),"y")
開始>終了でも常に正の満年数が返ります(本来は #NUM! になるため対策)。
DATEDIFを使わず満年数を算出(ロジック再現)
=YEAR(終了)-YEAR(開始) - IF( DATE(YEAR(終了),MONTH(開始),DAY(開始)) > 終了, 1, 0 )
“今年の開始記念日”が終了日より後なら1年引くことで満年数を再現します。
年度ベースで計算したい(例:4月始まり)
=DATEDIF(開始, 終了, "y") + IF( MONTH(終了)>3, 1, 0 ) - IF( MONTH(開始)>3, 1, 0 )
「年度開始」を4月に置き換えて概算の年度差を算出します(厳密なロジックは業務規定に合わせて調整)。
よくあるつまずきと対策
“端数月日”は数えない仕様
“y” は満年のみを返します。例えば 2020/12/31 → 2021/12/30 は 0。翌年同月同日に到達していないため、満1年ではありません。端数も表示したいなら “ym”、”md” を併用してください。
順序が逆だと #NUM! エラー
開始日が終了日より後だとエラーになります。MIN/MAXで並べ替えるか、IFで事前チェックしてから DATEDIF を使いましょう。
文字列日付の解釈ズレ
“YYYY/MM/DD” を文字列で渡すと環境差で誤解釈することがあります。DATEで生成するか、セルに正しく日付入力を行い、表示形式も「日付」に設定してください。
年齢や勤続“満年数”の定義
「誕生日当日に年が増える」「入社記念日到達で+1年」など、基準日は業務定義どおりに。”y” はその“満”の考え方に一致するため扱いやすいです。
例題
問題1: A2セル(開始日)からB2セル(終了日)までの満年数をC2に表示してください。
解答例:
=DATEDIF(A2,B2,"y")
問題2: D2セルの誕生日から今日までの満年齢をE2に表示してください。
解答例:
=DATEDIF(D2,TODAY(),"y")
問題3: F2(開始)とG2(終了)の順序が逆でも正しい満年数をH2に表示してください。
解答例:
=DATEDIF(MIN(F2,G2),MAX(F2,G2),"y")
問題4: I2(開始)とJ2(終了)を「◯年◯か月◯日」でK2に表示してください。
解答例:
=DATEDIF(I2,J2,"y")&"年"&DATEDIF(I2,J2,"ym")&"か月"&DATEDIF(I2,J2,"md")&"日"
問題5: L2(開始)とM2(終了)の満年数をDATEDIFなしでN2に表示してください。
解答例:
=YEAR(M2)-YEAR(L2) - IF(DATE(YEAR(M2),MONTH(L2),DAY(L2))>M2,1,0)
まとめ
DATEDIF(“y”)は「満年数」を一行で返す定番関数です。端数月日を含めない仕様、開始≤終了の条件、表示形式(日付)を押さえれば、年齢・勤続・契約年数などの年差計算が安定します。詳細表記が必要なら “ym” と “md” を組み合わせ、年度基準や月末基準の要件には別ロジックを補助的に使う——この設計の使い分けが実務をスムーズにします。
