年齢や勤続期間の計算に重宝する実用関数「DATEDIF」。だがExcel 2007では、全く同じ式が違った結果になることが…。試しに検算してみると、2007の不具合(バグ)であることは明白。この関数にまつわる歴史をひも解くと、原因の一端がうかがえる。

[画像のクリックで拡大表示]

 「Excel 2007には不具合がある」──。あるExcel関連のコミュニティーサイトで、そんな話題が持ち上がっていた。新しいソフトにバグはつきもの。「またか」と読み進めていくと、珍しく関数についての指摘だった。なるほど、DATEDIF(デイトディフ)関数の式を立ててみると、全く同じ式にもかかわらず、従来版と2007とで、異なる結果になることがあるのだ。

 そもそもDATEDIF関数は、引数に「開始日」と「終了日」を指定して、その期間の長さを計算する関数。3番目の引数に、求める「単位」を指定する。単位を「Y」とすれば年数を計算できるので、とりわけ年齢計算に便利。開始日に生年月日、終了日に今日の日付を指定すれば、今日時点での満年齢を一発で計算できる。年数を除いた月の端数を求める機能もあり、「○年○カ月」のように勤続期間を算出したいときにも威力を発揮する。

 さて、上図に示した問題の式では、開始日を「2001年12月1日」、終了日を「2003年11月30日」と指定して、その期間の長さを求めている。正しくは「1年と364日」なので、単位を「YD」と指定して端数となる日数を求めれば、「364」と答えが表示されるはずだ。確かにExcel 2003ではそのように計算される。だが、2007で同じ式を立てると、「50」という明らかに間違った結果が表示されてくる。

年数や月数を一発で計算できる実用関数
2_spx400.jpg
2_spx400.jpg
引数「単位」を「
引数「単位」を「"Y"」とすれば年数が求められるので、今日時点の満年齢がわかる。「"YM"」とすれば月の端数が求められるので、年数を求める式などと組み合わせれば「○年○カ月」と表示できる