セミナーで質問をいただくことが多いなぁ、と思いつつ、ちょこテクには書いていなかったのが DATEDIF 関数。
2 回くらいに分けて書いておこうかな、と思います。

勤続年数を知りたい、年齢を知りたい、契約年数を知りたい、、、。
ようは、始点となる日付と終点となる日付があって、期間内の年数や月数を求めたい、というときの話です。
やってみよう!と思って単純な引き算でチャレンジしてみたけれどうまくいかない、という方もいらっしゃるのではないでしょうか。

一般的に、ユーザー情報などを登録するデータベースにユーザーの年齢や勤続年数は登録しません。しかし、生年月日や入社日を登録することで、今日現在または、指定した年月日にその人が何歳なのか、勤続何年なのかを計算する仕組みは使います。

DATEDIF 関数も Excel で使うことのできる仕組みの 1 つだと思えばよいでしょう。

Excel では、複数の関数を組み合わせて期間内の年数などを求めることもできますが、特別な条件がない限りは、専用の関数を使って求めるほうが短い数式で答えにたどりつくことができます。数式は短いほうがわかりやすいし、ミスも起きにくいです。

たとえば、A と B のいずれも、[開始日] と [終了日] の日付をもとに [満年数] を求めていますが、あきらかに DATEDIF 関数を使った A の数式のほうが短いです。
 

A : DATEDIF 関数を使った数式
01.png


B : YEAR 関数と MONTH 関数を使った数式
02.png

DATEDIF 関数の特徴、説明

DATEDIF 関数は、開始日から終了日までの期間を求めるときに使える関数です。
開始日と終了日の間の日数、月数、年数を返します。数式は次のとおりです。

=DATEDIF(開始日,終了日,単位)

開始日:期間の開始となる日付、またはその日付が入力されているセルを指定します。
    日付を直接指定する場合は、「”」(半角ダブル クォーテーション) で
    括ります。

終了日:期間の終了となる日付、またはその日付が入力されちるセルを指定します。
    日付を直接指定する場合は、「”」(半角ダブル クォーテーション) で
    括ります。

単位 :年数や月数など、何を返したいのかの種類を指定します。
    単位は下表のとおりです。単位は「”」(半角ダブル クォーテーション) で
    括ります。

03.png
 

DATEDIF 関数では、「いつから」、「いつまで」を「この単位」で表示したいと Excel に指示するつもりで数式を作ります。

=DATEDIF(いつから,いつまで,この単位) なので、

=DATEDIF(“2015/1/1”,”2016/1/1”,”Y”) だと「1」が、
=DATEDIF(“2015/1/1”,”2016/1/1”,”M”) だと「12」が、
=DATEDIF(“2015/1/1”,”2016/1/1”,”D”) だと「365」が返ります。


「いつから」や「いつまで」がどこかのセルに入力されているのなら、そのセル番地を指定します。

04.png
 

この関数は、Lotus 1-2-3 との互換性を保つために Excel に組み込まれたという歴史から、今でも Excel の [関数の挿入] ダイアログ ボックスや入力支援の一覧に表示されません。

そのため、正しい関数名の指定や括弧の入力も、すべて手作業でやらなければなりません。また、数式の作成時に引数のヒントも表示されないので、「次の引数になにを指定するか」などを数式の作成中に確認できません。

開始日や終了日として指定するセルはどこなのか?単位として何を使用するのかを事前に考え、内容をメモなどに書き起こしたりしながら作成することをおすすめします。
 
05.png

勤続年数を求める

DATEDIF 関数を使って、社員の勤続年数が、「2016年10月1日」の時点で何年なのかを求めてみます。
開始日はそれぞれの社員の入社日、終了日はセル B1 の日付とします。

最初にセル D4 に数式を作って、それをほかのセルにコピーする予定です。
今回求めたいのは開始日から終了日までの満年数ですから、DATEDIF 関数の単位は
“Y” です。
06.png
 

  1. 勤続年数を表示したいセルに「=DATEDIF(」と入力します。
    (関数名は小文字でも問題ありません。)
    07.png
     
  2. 「=DATEDIF(開始日,終了日,単位)」となるように数式を作成します。
    (満年数を求めるための単位 “Y” は小文字でも問題ありません。)
    08.png
     
  3. 結果が表示されます。
     
    1978年4月1日に入社したこの方は、2016年10月1日の時点で勤続年数 38 年ということです。
    09.png
     
  4. この数式を同じセルのほかのセルにコピーする場合は、終了日として指定しているセル B1 を絶対参照にします。

    [F4] キーを使っても、直接「$」を入力してもよいので、「$B$4」となるように編集します。
    10.png
     
  5. 数式を同じ列のほかのセルにコピーすると、それぞれの入社日を開始日とした満年数 (勤続年数) が表示されます。

    2015年12月1日に入社した徳川さんは、2016年10月1日の時点では、10ヶ月しか経っておらず、1年に満たないため「0 (ゼロ)」という値が返っています。
    11.png
     

日付であることが重要

Excel では、シリアル値という日付や時刻を表す数値を使って日数や時間の計算を可能にしています。

(Windows 版の) Excel では、1900年1月1日をシリアル値「1」として経過日数をプラスしていきます。たとえば 1900年1月2日は 1日経過しているため、シリアル値で表すと「2」です。

Excel では、シリアル値に日付の表示形式を設定することで、セルに「2015年10月1日」や、「10月1日」のような見た目で日付を表示できます。

今回のように、セルに入力されている開始日と終了日を計算で利用するときには、セルの値に注意してください。
開始日と終了日には、Excel が “日付” として認識できる、シリアル値を指定しなければなりません。
たとえば下図のように、終了日のセルに文字列として日付に見立てた値を入力しても Excel はこれを日付だとは認識できないため、計算結果がエラーとなります。

12.png

 


年数を表示したいのではなくて、「勤続年数が10年の社員が何人いるのか」を知りたかったり、「30 代の社員は何人いるのか」を求めたかったりするのだと思います。

勤続年数や年齢を手入力するのは現実的ではないため、DATEDIF 関数を使って計算します。
必要な年数を求めた結果があれば、リストでフィルターをしたり関数で人数を求めたりできますので、本来の目的を達成するために必要な値を得る過程で使っていただきたいです。
 

石田 かのこ