社員名簿に勤続年数の列を作りたいとき、1人ずつ手で計算して入力すると、毎年直す手間がかかります。Excelなら、入社日と基準日から「4年7か月」のような表示を数式で出せます。
・入社日から「〇年〇か月」を自動で出したい。。
・在籍中の人と退職した人が同じ名簿に混ざっている。。
・4月1日入社で3月31日退職なのに、0年11か月になってしまう。。
本記事では、勤続年数を求める数式と基準日の決め方、退職者が混ざった名簿や平均勤続年数の出し方を紹介します。うまく計算できないときの直し方もまとめました。
先に結論:勤続年数を求める数式
B2セルに入社日、E2セルに基準日が入っている場合、次の数式で「〇年〇か月」と表示できます。
=DATEDIF(B2,$E$2,"Y")&"年"&DATEDIF(B2,$E$2,"YM")&"か月"
入社日のセル番地と基準日のセル番地を、自分の表に合わせて変えれば使えます。ここからは、この数式のしくみを順に見ていきます。
勤続年数はDATEDIF関数で求める
DATEDIF(デイト・ディフ)関数は、開始日から終了日までの期間を、指定した単位で求める関数です。
=DATEDIF(開始日,終了日,"単位")単位は6種類ありますが、勤続年数で使うのは次の3つです。2022年4月1日から2026年11月3日までの期間で計算した結果を添えます。
| 単位 | 求められるもの | 結果の例 |
|---|---|---|
| “Y” | 満年数 | 4 |
| “YM” | 1年に満たない月数 | 7 |
| “M” | 総月数 | 55 |
"Y"で出した「4」と"YM"で出した「7」を、&で文字とつなげると「4年7か月」になります。残りの単位は、公式ヘルプのDATEDIF関数で確認できます。
基準日の決め方
年度末など、決まった日で計算する
「2027年3月31日時点」のように決まった日で計算するときは、基準日を1つのセルに入力し、数式からそのセルを参照します。基準日を変えるときも、そのセルを直すだけで全員分が変わります。
このとき大事なのが、基準日のセルを$E$2のように絶対参照にすることです。$を付けないと、数式を下の行へコピーしたときに、参照先のセルもずれてしまいます。$は手で入力するほか、F4キーでも付けられます。詳しくは公式ヘルプの相対参照、絶対参照、複合参照を切り替えるをご覧ください。
今日時点で計算する
今日時点の勤続年数を出すときは、基準日の代わりにTODAY関数を使います。TODAY関数は現在の日付を返す関数で、かっこの中には何も入れません。
=DATEDIF(B2,TODAY(),"Y")&"年"&DATEDIF(B2,TODAY(),"YM")&"か月"印刷して提出する資料など、見る日によって数字が変わると困るものは、基準日のセルを使う方法が向いています。
実務で迷いやすい3つのケース
在籍中の人と退職者が混ざっている
C列に退職日を入力している名簿では、IF関数で「退職日が空欄なら基準日、入っていれば退職日」と切り替えます。G2セルに基準日が入っている場合の数式です。
=DATEDIF(B2,IF(C2="",$G$2,C2),"Y")&"年"&DATEDIF(B2,IF(C2="",$G$2,C2),"YM")&"か月"
4月1日入社・3月31日退職が「0年11か月」になる
2025年4月1日から2026年3月31日までを計算すると、満年数は0、総月数は11になります。DATEDIF関数では、4月1日の入社から満1年になるのは翌年の4月1日だからです。
退職日や基準日の当日までを勤続に含めて「1年0か月」としたいときは、終了日に1を足します。C2セルに退職日が入っている場合の数式です。
=DATEDIF(B2,C2+1,"Y")&"年"&DATEDIF(B2,C2+1,"YM")&"か月"当日を含めるかどうかや端数の扱いは、会社の規定で決まっていることがあります。規定がある場合は、それに合わせて数式を選んでください。
平均勤続年数を出す
「4年7か月」のように文字とつなげた結果は文字列なので、そのままでは平均を計算できません。そこで、"M"で総月数を別の列に出し、それを平均します。
E列に総月数を出す場合、E2セルの数式は次のとおりです。下の行へコピーします。
=DATEDIF(B2,IF(C2="",$G$2,C2),"M")総月数がE2からE5セルに入っている場合、平均勤続年数を小数第1位までの年数で出す数式は次のとおりです。
=ROUND(AVERAGE(E2:E5)/12,1)うまく計算できないときの直し方
「=DAT」と入力しても候補に出ない
DATEDIF関数は、関数の候補や一覧に出てこないことがあります。古い表計算ソフト「Lotus 1-2-3」のブックに対応するために用意された関数で、候補に出ない関数と解説されています。候補に出なくても、最後まで手入力すれば計算できます。

エラーが表示される
エラーの種類から原因を絞り込めます。次の表の結果は、実際にExcelで入力して確かめたものです。
| 表示 | 原因 | 直し方 |
|---|---|---|
| #NUM! | 入社日が基準日や退職日より後になっている | 日付の順番と入力ミスを確認する |
| #NUM! | 基準日や退職日のセルが空欄になっている | 日付を入力する |
| #NUM! | 単位のつづりが間違っている(例: “X”) | “Y”・”YM”・”M”などに直す |
| #NAME? | 単位をダブルクォーテーションで囲んでいない(例: Y) | “Y”のように半角のダブルクォーテーションで囲む |
| #VALUE! | 日付として読めない文字が入っている | セルの中身を日付に直す |
#NUM!や#VALUE!など、エラー表示そのものの意味は、エラー表示の意味と直し方まとめで一覧にしています。
「1900/1/4」のような日付で表示される
結果を出すセルの表示形式が日付になっていると、「4」という数字が「1900/1/4」と表示されます。計算は合っているので、「ホーム」タブの「数値の書式」で「標準」を選ぶと、数字の表示に戻ります。
入社日が空欄の行で「126」のような大きな数字になる
入社日のセルが空欄でもエラーにならず、基準日が2026年11月3日のときは"Y"の結果が「126」になりました。入力前の行がある名簿では、空欄なら何も表示しないようにしておくと安心です。
=IF(B2="","",DATEDIF(B2,$E$2,"Y"))使う前に知っておきたい注意点
公式ヘルプが「推奨しない」としているのは"MD"で、この記事の「〇年〇か月」の数式で使う"Y"と"YM"は対象ではありません。ただし、関数全体についても誤った結果を返すことがあると案内されているので、月末に入社した人などの結果は確かめてください。勤続年数では、特に次の2点に気をつけてください。
| 注意点 | 内容 | 対応 |
|---|---|---|
| 月末に入社した人 | 2026/1/31から2026/2/28を”M”で計算すると0、2026/3/1までなら1になる | 月末入社の人の結果を手で確かめる |
| 日数まで出したいとき | “MD”は公式が非推奨。2026/1/31から2026/3/1では「-2」になった | 次の数式で日数を求める |
「〇年〇か月〇日」まで出したいときは、余りの日数をEDATE関数との引き算で求めます。C2セルに基準日が入っている場合の数式です。
=DATEDIF(B2,C2,"Y")&"年"&DATEDIF(B2,C2,"YM")&"か月"&(C2-EDATE(B2,DATEDIF(B2,C2,"M")))&"日"DATEDIF関数を使いたくない場合、総月数は次の数式でも求められます。満年数はこれを12で割って切り捨て、1年未満の月数は12で割った余りで出せます。B2セルに入社日、C2セルに基準日が入っている場合の数式です。
=(YEAR(C2)-YEAR(B2))*12+MONTH(C2)-MONTH(B2)-(DAY(C2)<DAY(B2))まとめ
Excelで勤続年数を求める方法を整理します。
- 「〇年〇か月」は、DATEDIF関数の
"Y"と"YM"を&でつなぐ - 基準日のセルは
$E$2のように絶対参照にする。今日時点ならTODAY関数を使う - 退職者が混ざった名簿は、IF関数で終了日を切り替える
- 当日までを勤続に含めるなら、終了日に1を足す
- 平均は、
"M"で出した総月数をもとに計算する - 候補に出なくても、手入力すれば計算できる
まずは名簿の入社日の横に、基準日を入れたセルと「〇年〇か月」の数式を用意するところから試してみてください!
