Excel 2007 で DATEDIF 関数で指定する開始日 (start_date) および終了日 (end_date) が特定の条件に合致する場合、DATEDIF 関数の結果が不正になる

現象
Excel 2007 Service Pack 3 で  DATEDIF 関数の第 3 引数に日数差を戻り値とする "YD"、もしくは "MD" を設定し、データの終了日を表す第 2 引数に下記の全ての条件に合致するデータを入力した場合、意図しないデータが返される場合があります。

なお、現時点では、修正プログラムの適用状況によって “113” または “164” 多い値となることを確認しています。
  • 閏年 (2000年、 2004年、 2008 年、 2012年 など)
  • 1 月
  • 開始日 (start_date) に入力したデータの日付よりも前の日付

原因
解決方法
回避策
Excel 2007 Service Pack 3 を適用した上で下記の数式を利用してください。
  1. Excel 2007 を起動します。
  2. A1 セルに 2011/3/20 を入力します。
  3. B1 セルに 2012/1/1 を入力します。
  4. C1 セルに次の数式を入力します。

    - YD の場合
    =IF(AND(INFO("release")="12.0",MONTH(DATE(YEAR(B1),2,29))=2,MONTH(B1)=1,DAY(A1)>DAY(B1)),
             DATEDIF(A1,B1,"YD")-(DATEDIF(DATE(2011,1,2),DATE(2012,1,1),"YD")-364),
             DATEDIF(A1,B1,"YD"))

    - MD の場合
    =IF(AND(INFO("release")="12.0",MONTH(DATE(YEAR(B1),2,29))=2,MONTH(B1)=1,DAY(A1)>DAY(B1)),
             DATEDIF(A1,B1,"MD")-(DATEDIF(DATE(2011,1,2),DATE(2012,1,1),"MD")-30),
             DATEDIF(A1,B1,"MD"))


    上記の数式に関する詳細は、関連情報のサポート技術情報をご覧ください。
    なお、上記数式における DATE(2011,1,2) および DATE(2012,1,1) は固定日付です。
    実際に計算する開始日/終了日に係わらず、この固定日付は変更しないでください。
    この固定日付については後述の [回避策に関する補足] にて説明しています。
結果

第 3 引数が YD の場合、C1 セルに 287 と表示されます。
第 3 引数が MD の場合、C1 セルに 12 と表示されます。


NOTES:
Service Pack 3 未適用では不具合発生条件および不具合症状が上記とは異なります。
Microsoft では最新の Service Pack 適用を推奨しています。本ドキュメントでは Service Pack 3 適用下における不具合症状の説明と、その回避策の提示を行なってます。


状況
マイクロソフトでは、この問題について現在調査中です。詳細については、わかりしだいこの資料に掲載する予定です。
詳細
再現手順
  1. Excel 2007 を起動します。
  2. A1 セルに 2011/3/20 を入力します。
  3. B1 セルに 2012/1/1 を入力します。
  4. C1 セルに次の数式を入力します。
    =DATEDIF(A1,B1, "YD")
結果

C1 セルに 287 と表示されるべきですが、400 と表示されます。
なお、この値は Office 2007 SP3 の状態で表示されますが、適用する修正プログラムにより異なる場合があります。
B1 セルの値が 2012/1/21 などの場合は、A1 セルの日付 "20" よりも後の日付である "21" であるため、正しい値が表示されます。
また、月が 1 月ではなく "2012/2/1" の場合や閏年以外の "2013/1/1" の場合も、正しい値が表示されます。


回避策に関する補足

DATEDIF(2011年1月2日,2012年1月1日,<YD もしくは MD>) を計算した場合、正しい値は以下です。
 “YD” の場合 : 364
 “MD” の場合 : 30

ただし、Excel 2007 Service Pack 3 は修正アップデートの適用状況によって上記の値とは異なる値を出力するため、以下の式で修正アップデートの適用状況を意識する事無く、そのPCにおける差異を計算しています。
この差異を差引く事で正しい値を計算します。

=DATEDIF(DATE(2011,1,2),DATE(2012,1,1),"YD")-364
=DATEDIF(DATE(2011,1,2),DATE(2012,1,1),"MD")-30




関連情報
Excel 2010、Excel 2013 では発生しません。

うるう年を判定する数式を参照するには、以下のサポート技術情報をご覧ください。
214019 うるう年を判定する方法 

Excel の基本的な日数及び表示方法と計算方法を参照するには、以下のサポート技術情報をご覧ください。
880979 日数および日付の表示方法と計算方法 - Excel 操作の基本編 -

注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2678753 - 最終更新日: 10/18/2016 11:18:00 - リビジョン: 4.0

Microsoft Office Excel 2007

  • kbnofix kbexpertiseinter kbexpertiseadvanced KB2678753
フィードバック