エクセル

 ここしばらく,MS−Excelでマクロプログラミング中。
 某データ処理が,あまりにも複雑な条件分岐しながらの計算を伴い,しかもそれを力業で手計算でやらせようという業務指示に唖然。そりゃ今回必要な分は部員全員でやっちまえばなんとかなるぐらいの量かもしれないが(それでもかなりの苦労),計算条件とかがちょっと変わったら,しかも今後変わる可能性が大にも関わらず,また全データを手作業で計算させる気ですか?そうですか。

 そんなことは絶対嫌なので,自分の労力とプログラミングに必要な工数をざっくりと見積もってややプログラムの方が時間かかりそうだったけど,作成することに決めた。
 このデータ処理作業は,もともと某法律が変わることに対応するためで,これはこれでいろいろと突っ込み所が多い内容なんだけど,それ以前のレベルで,Excel Macro というか,MS-VBA に嵌まるハマる。

 例えば,IsNumeric() って関数。セル内のデータが数値計算可能な形式かどうかを判別する関数なんだが,どうも狙った通りの動作をしないのでよくよく確認すると空白セルで true を返す。空白セルってのはデータが入っていないんだから,ヌルと一緒で計算対象にはならない方がいいんじゃないの? というか,どういう時にこの関数を使うことを考えてこういう仕様にしたんだろ?
 で,その空白セル,IsNull() 関数だと False を返してくる。どうやらこれはヌルでは無いが IsEmpty() 関数だと True を返すので,文字列 "" とかと同じ扱いのようだ。こんなん判るか。だいたい,IsEmpty なんてなんのために必要なの? 空白セルをヌルデータ扱いしないメリットってなんなんだろう??

 そのほか,Run&Debugを繰り返していたら突然「メモリが足りません」とでて突然強制終了。え?HDDの空きも十分だし,メモリは多くはないけど512Mは載っているのに・・・。
 どうも MS-ExcelVBA は,プログラムRUN中に異常終了したらメモリを開放しないままで,再RUN すると新たに配列を取り直して,となってメモリ不足になった様子。
 MS-Excel を時々完全に終了して,再ロードすれば問題ないようだけど,なんでこんな変な仕様なんだ?
 むっきー。

 なお,環境はXp+Excel2000。