過去に「Excel 年齢を計算する」記事で、DATEDIF関数や YEARFRAC関数を使って満年齢を計算する方法をご紹介しました。
同様に、勤続年数を計算する例題も市販 Excel本やネット記事でも多く紹介されています。

ところで、年数だけでなく勤続年月を求めるにはどうしたらよいでしょう。

まず、DATEDIF関数をおさらいしておきましょう。
DATEDIF関数は"隠れ関数(隠し関数)”のひとつで、関数一覧にも表示されず、途中までタイプしても候補リストにも出ませんし、ヒントも出ません。
でも、定番関数として実に多用される関数です。

その書式は DATEDIF(開始日,終了日,単位) です。
第3引数には次のものが使えます:

表示 意味
"Y" 期間の年数
"M" 期間の月
"D" 期間の日数
"YM" 年数および日数を無視した開始日から終了日までの月数
"YD" 年数を無視した開始日から終了日までの日数
"MD" 年数および月数を無視した開始日から終了日までの日数


DATEDIF関数は、第1、第2引数の開始日、終了日の間の日数を計算し、第3引数で指定した単位で返してくれる関数です。
よく市販本やネット記事で扱われる例題では「"Y"」が指定されます。

例えば、下図のように A2セルに入社日が、B2セルには「=TODAY()」が入力されているとき、C3セルに「=DATEDIF(A2,B2,"Y")」とすると勤続年数が求まります。

 

ただし、C3セルの表示書式として「#"年"」としてあります。

それでは、勤続年月を求めるにはどうしましょう。
DATEDIF関数の第3引数に「"YM"」を指定すれば月数だけを求められますので、これを利用します。
D2セルに「=CONCAT(DATEDIF(A2,B2,"Y"),"年",DATEDIF(A2,B2,"YM"),"ヶ月")」と入力しました。
つまり、「DATEDIF(A2,B2,"Y")」で勤続年数を、「DATEDIF(A2,B2,"YM")」で勤続月数をそれぞれ求め、それらを CONCAT関数で結合しました。

この DATEDIF関数を使わずに求めてみます。
閏年も考慮してみると 1年は 365.25日と表わせます。
つまり、4年ごとに 1日追加されます。
C4セルに「=INT((B2-A2)/365.25)」と入力すると、勤続年数が「33」と求まります。
D2セルに「=INT(((B2-A2)/365.25-TRUNC((B2-A2)/365.25))*12)」と入力すると、勤続月数が「10」と求まります。
TRUNC関数は、数値の少数部を除いて整数部分を取り出しますが、負値に対する動作が INT関数と違います。
引数の値が正値である場合は INT関数に置き換えても構いません。

 

もうひとつ、YEARFRAC関数も使ってみます。
C6セルに「=INT(YEARFRAC(A2,B2,1))」と入力すると、勤続年数が「33」と求まります。
D6セルに「=INT((YEARFRAC(A2,B2,1)-TRUNC(YEARFRAC(A2,B2,1)))*12)」と入力すると、勤続月数が「10」と求まります。

 

YEARFRAC関数は、DATEDIF関数と似ていますが、その書式は「YEARFRAC(開始日, 終了日, [基準])」です。
第3引数を上記のように「1」とすると、「実際の日数/実際の日数」、つまり入社日から本日まで日数で数えて、それを 365.25 で割った数値として返してきます。
勤続年数を求めるなら、その整数部分だけを取出しますが、勤続月数はその小数部分を 12倍して端数(小数点以下)を取り除きます。

こうしてみると、DATEDIF関数のほうが簡単に求まるように感じると思います。