DATEDIFのバグ

Pocket

ExcelのDATEDIF関数は今一つ挙動不審なので使わないようにしていたのですが、具体的なバグについて今頃、知りました。
使っていないから自分で気付くはずがないのですが。
このバグは有名なのだそうですが、修正されていません。
マイクロソフトはこれをExcelの正式なワークシート関数として取り扱っていないからでしょう。
確かにExcel2007のヘルプを見てもDATEDIFは見付かりません。

DATEDIF関数は経過年月数を計算するワークシート関数です。
=DATEDIF(開始日,終了日,パターン)
のようにして使います。
パターンに、"Y","M","D"などを指定するとそれぞれ、年数、月数、日数を計算します。
"MD"を指定すると月未満の日数を計算するのですが、ここにバグがあります。

開始日「2009/9/30」
終了日「2009/10/1」
とした場合、9月30日の翌日は10月1日なので経過日数は1日となります。
これをDATEDIFで計算すると、"D"のときは「1」となるのに対し、"MD"のときは「2」となります。明らかに誤りです。
どうやら「終了日の属する月の末日」-「開始日の日」+「終了日の日」として計算しているようです。
"YD"にも同様のバグがあります。

DATEDIFは使わないのが無難なようです。

開始日 終了日 D MD YD
2009/9/30 2009/10/1 1 2 2

(2010年10月12日、追記)
本件については次のどちらかの修正で解消されたようです。
http://support.microsoft.com/kb/974488/ja
http://support.microsoft.com/kb/974163/ja
ExcelはDATEDIFを公式の関数として取り扱っていないためか、「この修正プログラムパッケージで修正される問題」に本件について書かれていませんが、両方、適用したところ、解消されたことを確認しました。

[ 2009年10月23日 | カテゴリー: Excel | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報