DATEDIF関数の怪(Excel)

Excelについて、「二つの日付を比較して、その間の月数を数える関数ってない?」という質問があった。ググってみると「DATEDIF関数」というのがそれらしい。

Excel(エクセル)基本講座:日付の関数
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/today.htm#datedif

しかしこの関数、バグだらけである。年数と月数を調べるのは問題ないようだが、日数がひどい。試してみよう。

2010-02-03_125918.png

2008年12月15日から2010年2月2日までの月数及び日数を求める。結果は”13ヶ月と18日”になるはずだ。月数が”13″なのは問題ないとして、日数がむちゃくちゃである。

なぜこんなひどい実装になっているかについては、この10年の間にいろいろ考察がなされているみたい。(Excel2002の頃からバグりまくりらしい)

kt関数Ref:ktPeriodYMD
http://www.h3.dion.ne.jp/~sakatsu/ktfunc_ref0206.htm#DATEDIF

それでもMicrosoftは直さないんだから、もうこの関数は使うなってことなのだろう。正確に日付計算したいならVBでも使ってDateTimeオブジェクトに変換しろってことなんかね。

おまけ。
Perlで計算すると全く問題なかった。(当たり前だ)

#!/usr/bin/perl
use Perl6::Say;
use DateTime;
my $a2 = DateTime->new( year => 2008, month => 12, day => 15 );
my $b2 = DateTime->new( year => 2010, month => 2, day => 2 );
say( ( $b2 - $a2 )->delta_months . " months" );
say( ( $b2 - $a2 )->delta_days . " days" );
# 実行結果
# 13 months
# 18 days

WindowsXP + 光回線だとWindows Updateできない?

上司からものすごく古いノートPCを渡されて、「遅くて使いもんにならんので何とかしろ」と言われた。何ともしようがないけど、とりあえずリカバリから始めてみたら驚いた。なんと無印XPのノートPCだったのだ。メモリも128MBしかないし、いったい何年前のものなんだか。

で、さすがに無印はまずいのでSPを当てようと思ったら、Windows Updateにつながらない。エラー番号で検索してみてまた驚いた。

特定のサイトに繋がらない – 教えて!goo
http://oshiete1.goo.ne.jp/qa3082381.html

少なくとも無印のXPでは光回線が使えなかったらしい。そうだったっけ? SP2の時代が長かったので、昔のことは忘れてしまった。書いてある通り、フリーウェアを使ってMTUを1500に書き換えて再起動。それでうまくいった。

窓の杜 – NetTune
http://www.forest.impress.co.jp/lib/inet/websupt/speedanlz/nettune.html

特定のメール(Outlook)を自動的に削除するスクリプト

社内で「特定人物向けのメールを全員に送信しちゃった! 何とかして!」と言われたときに作ったスクリプト。グループポリシーを使ってPCにログオンしたときに起動するように設定することを想定している。Outlookを自動的に起動して受信メールをチェックし、条件に合うもの(今回は特定の語句を題名に含むもの)を削除する。

Continue reading