まりふのひと

Excel(エクセル)の DateDif 関数について

 今日のパソコンA組、DateDif関数の説明を‥‥ と、クリックしたが「おかしいなぁ〜」
以前調べた内容と違うのだ。その場は繕ったが、帰宅しブログを調べたら「下書き」に入ったままだった。



DateDif 関数‥‥ 色々複雑な事情があるようだ。

  • “DateDif”でヘルプを検索しても出てこない。
    • インストラクタのネタ帳 には、次のようにあった。
       マイクロソフトのサイトでも ‥‥ 「DATEDIF 関数は、他の表計算アプリケーションとの互換を保つために用意された関数のため、関数ウィザードには表示されません。」という記述がありますが、要は Lotus1-2-3 のユーザーをExcelに取り込むためにサポートした関数ということでしょう。
       ダイアログにも表示されない、ほとんどのバージョンでヘルプにも表示されないという、特殊な状況にあるDATEDIF関数ですが、マイクロソフトの初心者・中級者をターゲットとしているであろうMicrosoft Usersの、「年齢や勤続年数を求める『DATEDIF』」という記事では、しっかり利用例が紹介されていたりします。
       ここまで紹介するのなら、ダイアログやヘルプもちゃんと対応させればいいのにと思うのですが...

  • DATEDIF 関数(Office のサポート ページ - support.office.com)
     2つの日付の間の日数、月数、または年数を計算します。この関数は、Lotus 1-2-3 との互換性を提供するために用意されています。

    書式
     DATEDIF(start_date,end_date,unit)
    • Start_date: 期間の初日 (開始日) を表す日付を指定します。日付は、引用符で囲んだテキスト文字列 (例 : "2001/1/30")、シリアル番号 (例 : 36921 (1900 日付システムを使用している場合は 2001 年 1 月 30 日に相当))、または他の数式や関数の結果 (例 : DATEVALUE("2001/1/30")) として入力できます。
    • End_date: 期間の最終日 (終了日) を表す日付を指定します。
    • Unit: 返される情報の種類を指定します。値は次のいずれかになります。
    • Unit: 戻り値
      • "Y" 期間内に含まれる満年数を指定します。
      • "M" 期間内に含まれる満月数を指定します。
      • "D" 期間内の日数を指定します。
      • "MD" start_date と end_date の日数差を指定します。日付の月と年は無視されます。
      • "YM" start_date と end_date の月数差を指定します。日付の日と年は無視されます。
      • "YD" start_date と end_date の日数差を指定します。日付の年は無視されます。

    解説
     日付は連続したシリアル番号として格納されるため、計算に使用できます。既定では、1899 年 12 月 31 日はシリアル番号 1、2008 年 1 月 1 日は 1900 年 1 月 1 日から 39,448 日後になるため、シリアル番号 39448 となります。
     DATEDIF 関数は、時の経過を計算する必要のある数式に便利です。

  • DateDif関数のバグについて(10.05.09)
     まず日本の法律のおさらいです。民法 第一編 第六章 期間の計算(第138条―第143条)に期間計算についての記述があります。
    • 第百四十条
       日、週、月又は年によって期間を定めたときは、期間の初日は、算入しない。ただし、その期間が午前零時から始まるときは、この限りでない。
    • 第百四十三条
       週、月又は年によって期間を定めたときは、その期間は、暦に従って計算する。
      2  週、月又は年の初めから期間を起算しないときは、その期間は、最後の週、月又は年においてその起算日に応当する日の前日に満了する。ただし、月又は年によって期間を定めた場合において、最後の月に応当する日がないときは、その月の末日に満了する。

     つまりExcelのDATEDIF関数の単位「MD」「YD」は閏年を挟むと計算結果を正しく返しません
    上記の通り「MD」「YD」の結果次第では「Y」「YM」「M」も同様に影響を受けます。また Excel2007については SP2にしておかないと更に違ったバグを起こしますのでご注意下さい。

  • 「2007」に関数の不具合?――過ちを繰り返す「DATEDIF」の受難(第72回)(2008年12月9日 page:1/3)
     さて、上図に示した問題の式では、開始日を「2001年12月1日」、終了日を「2003年11月30日」と指定して、その期間の長さを求めている。正しくは「1年と364日」なので、単位を「YD」と指定して端数となる日数を求めれば、「364」と答えが表示されるはずだ。確かにExcel 2003ではそのように計算される。だが、2007で同じ式を立てると、「50」という明らかに間違った結果が表示されてくる。

  • DATEDIFの読み方は?−デイトディフ
     DATEDIF関数は、日付の差を返す関数ですから「DATEs DIFference」あたりを省略して、関数名が「DATEDIF」となっていると考えるのが自然です。