Excelでは、入社日から現在までの勤続年数、契約開始日から終了日までの期間、誕生日から年齢を求める計算など、日付を基準に年数を算出する場面が数多くあります。
ただし、単純に終了年から開始年を引くだけでは、月日を考慮できず、実際の経過年数とずれることがあります。
年だけを整数で求めたいのか、年と月を分けて表示したいのか、少数を含む年数にしたいのかによって、選ぶべき関数は異なります。
満年数を求めるならDATEDIF関数、年と月を分けるならDATEDIF関数を組み合わせ、少数を含む年数ならYEARFRAC関数を使うと整理しやすくなります。
この記事では、1行目に見出しがある表を使い、開始日をA列、終了日をB列に入力した場合を例に、エクセルで年数を計算する方法を詳しく解説します。
エクセルで満年数を求めるDATEDIF関数
それではまず、開始日から終了日までの満年数を求めるDATEDIF関数について解説していきます。
| 開始日 | 終了日 | 満年数 |
|---|---|---|
| 2018/4/1 | 2026/10/14 | 8 |
DATEDIF関数の基本構文
DATEDIF関数は、2つの日付の差を指定した単位で返す関数です。
満年数を出したい場合は、C2セルに次の数式を入力します。
=DATEDIF(A2,B2,”Y”)
A2には開始日、B2には終了日を指定し、最後の引数に半角英字のYを入力します。
このYは、開始日から終了日までに経過した満年数だけを整数で返す指定です。
たとえば2018年4月1日から2026年10月14日までなら、8年と6か月以上が経過していても、返される結果は8になります。
勤続年数や会員年数のように、完了した年数を数えたいときに向く方法です。

【操作のポイント】開始日より終了日が後の日付になっているかを確認してから数式を入力します。
Y指定で求められる満年数
DATEDIF関数のY指定では、開始日と同じ月日を迎えるたびに結果が1増えます。
たとえば開始日が2020年12月20日で、終了日が2026年12月19日の場合、6年目の前日なので計算結果は5です。
翌日の2026年12月20日になれば、初めて結果は6になります。
この考え方は年齢や勤続年数の管理で重要です。
年だけを引き算するYEAR(B2)-YEAR(A2)では、誕生日や入社記念日前でも年齢や勤続年数が増えたように見えてしまうかもしれません。
月日まで判定した正確な満年数が必要なら、単純な年の引き算ではなくDATEDIF関数を使うことが基本です。

【操作のポイント】Yは大文字でも小文字でも使えますが、引用符を忘れずに入力します。
オートフィルによる複数行へのコピー
サンプル表のように複数の対象者や案件がある場合、C2に数式を入力した後、セル右下のフィルハンドルを下へドラッグします。
するとA2とB2の参照は、次の行ではA3とB3へ自動で変わります。
表の途中に空白行がない場合は、C2セルのフィルハンドルをダブルクリックすると、隣接データの最終行付近まで数式をコピーできます。
日付が文字列として保存されているとDATEDIF関数が正しく計算できないため、表示が日付らしく見えても注意が必要です。
セルを選択して数式バーを確認し、左寄せの文字列になっているときは、日付形式へ変換してから計算しましょう。
【操作のポイント】数式をコピーする前に、先頭行の結果が想定どおりかを確認すると入力ミスを早く見つけられます。
年と月を含めて表示するDATEDIF関数
続いては、年数だけでなく残りの月数も含めて表示する方法を確認していきます。
| 開始日 | 終了日 | 経過期間 |
|---|---|---|
| 2018/4/1 | 2026/10/14 | 8年6か月 |
年数と残り月数を連結する数式
年と月を日本語で見やすく表示するには、Y指定とYM指定のDATEDIF関数を文字列としてつなげます。
=DATEDIF(A2,B2,”Y”)&”年”&DATEDIF(A2,B2,”YM”)&”か月”
最初のDATEDIF関数は満年数を返し、2つ目のDATEDIF関数は年を除いた残りの月数を返します。
2018年4月1日から2026年10月14日までなら、結果は8年6か月です。
YMは年数を引いた後の余りの月数を求める単位なので、総月数ではない点を理解しておきましょう。
契約期間、在籍期間、保有期間などを一覧表で伝えるときに、年月表示は直感的で便利です。

【操作のポイント】年やか月の文字は必ず二重引用符で囲み、数式の連結には&を使います。
月だけを計算するM指定とYM指定
DATEDIF関数には、月数を求めるためのM指定とYM指定があります。
=DATEDIF(A2,B2,”M”)と入力すると、開始日から終了日までの総月数が返されます。
同じ日付条件では102か月となり、8年6か月という内訳ではなく、月単位の期間として確認できます。
一方、=DATEDIF(A2,B2,”YM”)の結果は6です。
こちらは満年数を除いた残りの月数だけを示します。
毎月の利用料金を計算する、試用期間を月単位で管理するなど、総月数が必要ならM指定を選びます。
年数と組み合わせて見せるならYM指定を使うという使い分けです。

【操作のポイント】Mは累計月数、YMは年を除く月数という違いを混同しないようにします。
年月表示で起こりやすい注意点
終了日が開始日より前の場合、DATEDIF関数はエラーになります。
未入力の日付がある行でもエラーを避けたい場合は、IF関数で条件を付ける方法が有効です。
=IF(OR(A2=””,B2=””),””,DATEDIF(A2,B2,”Y”)&”年”&DATEDIF(A2,B2,”YM”)&”か月”)
この数式では、A2またはB2が空白なら空白を返し、両方に日付が入ったときだけ年月を計算します。
入力途中の管理表でエラー表示を増やしたくない場合に役立ちます。
また、終了日が月末で開始日が月末以外のような条件では、感覚上の月数とDATEDIF関数の結果が異なることがあります。
社内規程や請求条件に独自の端数処理がある場合は、計算ルールを先に確認しましょう。
【操作のポイント】空白があり得る表では、最初からIF関数を組み合わせると見た目を整えやすくなります。
少数を含む年数を求めるYEARFRAC関数
続いては、8.5年のように少数を含めた年数を求めるYEARFRAC関数を確認していきます。
| 開始日 | 終了日 | 年数 |
|---|---|---|
| 2018/4/1 | 2026/10/14 | 8.54 |
YEARFRAC関数の数式と基本
YEARFRAC関数は、2つの日付の間隔を1年に対する割合として返す関数です。
C2セルには次の数式を入力します。
=YEARFRAC(A2,B2,1)
最後の1は基準日の指定で、実際の日数を実際の年の日数で割る方式です。
結果には小数が含まれるため、年換算の期間を連続的な数値として扱いたいときに適しています。
たとえば利息計算、按分計算、経験年数の換算、プロジェクト工数の年換算などで利用できます。
表示桁数は、ホームタブの小数点以下の表示桁数を増減するボタンで調整できます。
【操作のポイント】YEARFRAC関数の結果は小数なので、用途に合わせて表示桁数や丸め方を決めます。
YEARFRAC関数を入力する画面
数式を入力してEnterキーを押すと、C2には小数を含む年数が表示されます。
続けてC2セル右下の小さな四角を下方向へドラッグすると、各行の日付を参照した数式が入力されます。
この操作はオートフィルと呼ばれ、同じ計算式を大量のデータへ反映するときに便利です。
先頭セルだけに正しい数式を設定してからオートフィルすると、参照先のずれを防げます。
【操作のポイント】数式バーに表示された参照セルを確認し、A列とB列を正しく指定できているかを見ます。
丸め関数を組み合わせる方法
YEARFRAC関数は計算結果によって小数点以下が長く表示されることがあります。
小数第2位までで四捨五入するなら、ROUND関数でYEARFRAC関数を囲みます。
=ROUND(YEARFRAC(A2,B2,1),2)
この数式の2は、小数第2位まで表示する指定です。
切り捨てたい場合はROUNDDOWN関数、切り上げたい場合はROUNDUP関数を使用します。
報告書で8.5年と表示したいなら小数第1位、精密な期間換算なら小数第2位以上といったように、利用目的に合わせて調整します。
表示形式で桁数を減らすだけでは内部の値は変わらないため、計算にも丸めた値を使いたいときはROUND関数を使いましょう。
【操作のポイント】見た目だけ整えるのか、計算結果そのものを丸めるのかを区別して関数を選びます。
今日までの経過年数を計算するTODAY関数
続いては、終了日を入力せず今日までの経過年数を自動更新する方法を確認していきます。
| 開始日 | 今日までの満年数 | 今日までの年月 |
|---|---|---|
| 2018/4/1 | 8 | 8年6か月 |
TODAY関数で終了日を自動指定する方法
TODAY関数は、ブックを再計算した時点の今日の日付を返します。
開始日がA2にあるなら、今日までの満年数は次の数式で求められます。
=DATEDIF(A2,TODAY(),”Y”)
終了日セルを用意しなくても、ファイルを開くたびに当日基準の年数へ更新されます。
勤続年数や年齢の一覧を毎月更新せずに管理したい場合に便利です。
ただし、過去の時点における年数を固定して保存したい帳票には向きません。
計算基準日を固定したい場合は、TODAY関数ではなく、別セルに日付を入力して参照します。
【操作のポイント】TODAY関数は日付が変わると結果も変わるため、履歴管理用の表では基準日を別にします。
今日までの年と月を表示する数式
今日までの経過期間を年と月で表示するには、終了日部分をTODAY関数へ置き換えます。
=DATEDIF(A2,TODAY(),”Y”)&”年”&DATEDIF(A2,TODAY(),”YM”)&”か月”
この数式なら、入社日や契約開始日をA列に入力するだけで、現在までの年月を表示できます。
月初と月末では結果が変化する可能性があるため、月次報告では作成日を残しておくと後から確認しやすくなります。
日付が未来の場合はDATEDIF関数でエラーになるため、予定開始日も混在する表では条件を追加すると安心です。
=IF(A2>TODAY(),”開始前”,DATEDIF(A2,TODAY(),”Y”)&”年”&DATEDIF(A2,TODAY(),”YM”)&”か月”)のように設定できます。
【操作のポイント】未来日を扱う一覧では、開始前と表示する条件を付けるとエラーを防げます。
再計算と更新タイミングの確認
TODAY関数は揮発性関数のため、通常はブックを開いたときや計算が実行されたときに更新されます。
結果が更新されない場合は、数式タブの計算方法の設定が手動になっていないか確認します。
手動計算の場合はF9キーで再計算を実行できます。
ただし、関係者へ送る前に表示日付を確認する習慣も大切です。
自動更新される数式は便利な一方で、いつ時点の値かを明確にする必要があります。
【操作のポイント】提出用ファイルでは、基準日を表の近くに記載すると計算結果の意味が伝わります。
年数計算で発生するエラーと日付形式
続いては、年数計算でエラーが表示される原因と日付データの確認方法を解説していきます。
| 開始日 | 終了日 | 確認内容 |
|---|---|---|
| 2026/12/1 | 2026/10/14 | 開始日が終了日より後 |
開始日と終了日の前後関係
DATEDIF関数で最も多いエラーは、開始日が終了日より後になっているケースです。
開始日と終了日を逆に入力すると、計算できないためエラー値が表示されます。
入力順序にばらつきがある表では、MIN関数とMAX関数を利用して日付の早い方と遅い方を判定する方法もあります。
=DATEDIF(MIN(A2,B2),MAX(A2,B2),”Y”)
ただし、この方法は開始日と終了日の入力間違いを見えにくくする面もあります。
契約開始日と終了日の意味が決まっている表では、入力規則や条件付き書式で逆転を知らせるほうが管理しやすいでしょう。
【操作のポイント】計算式で吸収する前に、日付の役割と入力順序を統一します。
文字列の日付を本当の日付へ変換する方法
セルに2026/10/14と表示されていても、実際には文字列として入力されている場合があります。
この状態ではDATEDIF関数やYEARFRAC関数が正しく動作しないことがあります。
文字列の日付は、データタブの区切り位置機能を使う方法や、DATEVALUE関数を使う方法で変換できます。
DATEVALUE関数では、=DATEVALUE(A2)のように入力し、文字列をシリアル値の日付に変換します。
日付計算では見た目の形式より、セル内部で日付として認識されているかが重要です。
表示形式を日付に変更しただけでは文字列が日付にならないこともあるため、注意しましょう。
【操作のポイント】セルを選択して数式バーを見て、余分な空白や文字が入っていないか確認します。
IFERROR関数による表示の整え方
未入力や日付の逆転があり得る表では、IFERROR関数を使ってエラー表示を空白や任意の文言に置き換えられます。
=IFERROR(DATEDIF(A2,B2,”Y”)&”年”&DATEDIF(A2,B2,”YM”)&”か月”,”日付を確認”)
この数式では、通常は年月を表示し、計算できない場合だけ日付を確認と表示します。
ただし、IFERROR関数は本来見つけるべき入力ミスまで隠す可能性があります。
業務データでは、エラーを完全に見えなくするより、確認が必要な行を分かるようにする設計が大切です。
エラーを消すことより、原因を判別できる表示にすることを意識しましょう。
【操作のポイント】IFERROR関数を使った後も、異常な行がないか定期的に確認します。
まとめ エクセルで年数を計算する方法(年・月を含めて求める関数)
エクセルで年数を計算する基本は、開始日と終了日の差をDATEDIF関数で求める方法です。
満年数だけなら=DATEDIF(A2,B2,”Y”)を使います。
年と月を含めるなら、Y指定とYM指定を組み合わせて、8年6か月のように表示できます。
少数を含む年数が必要な場合は、=YEARFRAC(A2,B2,1)が便利です。
基準日を今日にしたいときは、終了日をTODAY関数に置き換えましょう。
目的に応じて満年数、年月表示、少数年数を使い分けることが、正確で見やすい表作成につながります。
日付の前後関係や文字列の日付にも注意し、先頭セルで結果を確認してからオートフィルすることがポイントです。