HTML

2004年10月07日 木曜日

Excel VBAは究極の「変数 = 箱」モデル

某MLに書いた内容ですが、僕が遭遇したExcelVBA的なものの発想法について。
ExcelVBAでのプログラミングでは、8月8日の日記福盛さんの日記で触れられているように、「VBAでエクセルのマクロを作る初心者がですね、変数の代わりにセルを使うんですよ」と言うような、matz日記で話題になった究極の「変数 = 箱モデル」に相当するようなコードを書く人が結構多い。
つまり、「ExcelVBAは普通のVBと違って、「手動で」かつ「視覚的に」変数領域を割り当 てられる、2次元でアドレス指定するポインタを持つBASICである。」と言い換えても良さそうですし、暴論を言えば、「一流のExcelVBA使いは1次元のポインタしかないCのポインタなど目をつぶって使えないとならない訳だ(暴論)。分からないなどと言わせぬ!」ということになる。まぁ実際に一流の(分かった気になって、有頂天になって、ナニか勘違いしている人_のことを言う)ExcelVBA使いのみなさんはこういうポインタに相当するものには名前をつけたりしなくて「全部直接セル参照」という神業をするので、構造化言語とかOOPとかにジャブ付けの頭しか持ち得ない僕なんかから見るとある意味「すげーっ!」(絶対そうなりたくない)と思ったり、頭の中がどうなっているのかかち割って見てみたいなんて思っている_3流のへっぽこVBA使い_なので、せめて妥協点として、Rangeオブジェ クトに名前をつけてアクセスしたくなっちゃいます。
1次元のRange領域を作ってやれば普通のポインタと同じような感覚(アドレス指定はCellsプロパティで2次元指定できるけど)ですかね。領域の割り当ては自分でやらないと駄目ですが… まぁ_ご利用は計画的に

たとえば「1から10までの話を求めたい」と言う例題を考える。和を求めたいRangeオブジェクトを渡すと「Rangeの和を求めるワークシート関数を文字列として返す関数」なんてものをつくってやれば、少し楽ができそうし、応用もあるのは手を付けてはいけないと思いますねえかな? まぁ実際にこつこつアルゴリズムを書くのではなく、計算などはすでにあるExcelのワークシート関数にしまえと言うことになります。(まぁ_手抜き_とも言う) 和を求めるくらいだとあまりありがたみが出ないが、同じ手間でRangeの最大・最小とか2個のRangeオブジェクトを関数に渡して最小自乗法とかさくっと出来ちゃったりするので、まぁ楽チンですね。(実際は統計関係の計算をするときはExcelのバグを知り尽くしてないと危ないですが。まぁ統計をちゃんとしたい時はExcelは使っちゃいけません。ちゃんと統計ソフトを使いましょう。)
ということでコード例。(基本的にVBでプログラムを書くときは型宣言を必須にしましょう。そうでないと全部Variantになったりしますから。あとDim文の使い方も意図しない型宣言になったりしますので注意しましょう。)

2004年10月06日 水曜日

今更ながらSTLをお勉強

某MLの影響でしばらく忘れ去っていたC++のStandard TemplateLibrary(間違っても某社の中間管理職のことではない。)のお勉強などを。以前C++を触っていた頃は、templateの動作がおかしかった(というか、仕様の通りに動作するようなコンパイラの実装系はなかったのね)ことと、STLって便利なコレクション系データのライブラリなのねと言う誤解があったことで、なぁなぁなお勉強になっていたのでした。
今日久しぶりにC++をSTLを使おうと思って、7年くらい前に購入していたεπιστημηさんの「Standard Template Library プログラミング」を再読することにした。(今じゃWebで読めます。) これまで根本的な誤解をしていたような気がするのだが、STLの肝 はループを抽象化したAlgorithmなんですね。(今更気がついたのか) Collectionへのアクセスはポインタを抽象化しているIteratorを、ループのカスタマイズをFunction Objectで行うのですね。いやぁ疑問が氷解というか、年食うとなんだか昔分からなかったことが、さくっと分かるようになるもんですね。(まぁ実際にプログラミングに生かせるかどうかわからんが。) とりあえず、凄く勉強になっています。(というか、勉強しなさい、コードを書きなさいと言うことなんでしょう…)

2004年09月18日 土曜日

EF 85mm F1.2L再修理完了

9月4日に発覚したEF 85mm F1.2Lの故障であるが、修理に出した結果マウント部のピンの不良とAF駆動部の回路の故障らしい。火曜日に修理が上がってきていたのだが、なかなか取りにいけなかった。キヤノンからのメモには「何度も故障して大変ご迷惑をおかけしております」という詫びが今回はあった。まぁ損をしているのはそっちだからねえ… 僕は何度か撮影機会を失っていますが、まだ許せるかな。
ピントなどは問題なさそうなので、いったん使用して使い込むしかないな。今度の対応で完治としたいものだ。

2004年09月12日 日曜日

SKY PerfecTV! 110

加入する予定ではなかったんだけども、今日から試聴中。理由は凄く簡単で、明日からAndromedaシーズン4が始まるからである。毎週月曜日はAndromedaの日ということで、仕事があっても切り上げて帰ってこよう! 22:50あたりからだから余裕だろう。個人的にはAnimaxとAXNが見れればOKか… CNNとかも試聴してみるかな。

2004年08月31日 火曜日

GT選手権に出かけるぞー

週末にもてぎで開催されるGT選手権に出かけるぞということで、撮影意欲が上がってきている。今回は長玉を借りてこようかなと思ったが、オリンピックの余波で出払っているらしいから、次回まで待ちとなった。できればEF 500mm F4L IS USMEF 400mm F4 DO IS USMか借りたいなぁとは思うんだけども…