Equipment

2005年12月07日 水曜日

Excel VBA Hacks (3)

なんでもかんでもExcel症候群」なんて言う_刺激的な_タイトルを付けるとなんだかそれだけでアクセスする人がいるのと、シリーズ化してみても良いかもしれないということで、タイトル変更。本シリーズではVBAとWindowsの標準的な環境における機能だけを使ったExcelおよびOfficeの使いこなしを深めていきたいと思う。
そんなわけで第3弾。テキストデータをさわっているといろいろ考えさせてくれるのが文字コード周辺の問題となる。通常Unixではnkfやらiconvやらを使ってコード変換をするのであるが、Windowsではどうするかというと、たいていの記事ではnkfをDLL化したフリーのライブラリnkf.dllを使うのが常道である。が、これもいちいちインストールしないと使えないので、めんどくさい。(めんどくさくないよと言う人は以下の記事を読む必要はない。ただ数十人のPCにいちいちマクロ以外のプログラムやライブラリを導入しつつ、自分がそのバージョンの管理もしなきゃならないという事態に陥れば、考えるところもあるだろう。)
いろいろWindowsのドキュメントをひもといていけば、だいたいの場合でやっぱりnkf32.dllもいらないと言う結論に落ち着いた。とりあえず文字コード変換して取り込むと言う関数も書いてみよう。方法としてはUnixのファイルをバイナリでもらってきて、以下の関数で取り込み。文字列を返すので、前回の関数を使って配列にすればよろしい。
以下ソースを示す。Microsoft Data Access Components (MDAC) のStreamオブジェクトを使うというのが処理のポイント。ソースを見れば何となく何をやっているか分かるだろう。詳しくは分かりにくいけどMDACのドキュメントをMSDNの中から探って欲しい。

2005年12月04日 日曜日

David Hawley, Raina Hawley / Excel Hacks—プロが教える究極のテクニック100選

最近Excelのスキルが凄くあがったなあと思ったので、道場破りでもと思って、本屋でこの本を_立ち読み_してみた。出てくる項目でしか判断してませんが、最後のXMLの項(これExcel2003の話だよなあ)を除けば、僕にとっては_ほぼすべてが既知_の本でした。O’ReillyのHacksシリーズは何冊か購入したけど内容のレベルにムラを感じるのではるが、この本ははっきりいって不要な本であるという結論ですかね。ランダムに結構な数をサンプリングしてみましたが、ほぼ既知の内容で読む価値無しという結論。ああっ、Excel依存症なのは僕のことなのかぁ・・・
ピボットテーブルとかピボットグラフとかソルバーとか言うものを使ったことが無いという人はExcel使いとしては初心者もいいところと思うので、Excelの初心者を卒業したいあたりの人にはまぁお勧めできるでしょうか。
そんなわけで、Excel依存症であることに気がついてしまった結果、全くブルーな気持ちでいっぱいです。この本を買ってやろうという予算は、ずっと買いそびれていた塩野七生さんの「ローマ人の物語」の1巻と2巻の購入資金に転用します。(実は3巻まで、図書館からかりて読んでいたので、未購入なのでした。7巻以降は別な理由で未購入ですが。と言っても、立ち読みレベルでだいぶん読んでいるのではあるけれど。)

2005年11月29日 火曜日

はてなブックマーク - なんでもかんでもExcel症候群

気がついたらこんな所にリンクを貼られてしまっているとは… 世の中恐ろしいものだ。今のところこの日記はblog的な要素(trackbackとかcommentとか)を持っていないことと、サーバの引っ越しをしたときに実行環境の差でBBSが動かなくなってしまったので、読んだ人の意見が取れない・・・(BBS自身は入れ替えたいけど、時間がねえ。) ちょっと悲しいが、まぁ良いか。
統計関係のワークシート関数のうちよく使うものだけは何とかしたいものだなあ・・・

2005年11月24日 木曜日

続・なんでもかんでもExcel症候群

Unixな機械からテキストファイルを直接持ってくると、改行がWindowsと異なるので、Excelで扱うのがちょっとめんどくさい。FTPできるときは、ASCIIで持ってくればDOS/Windowsなテキストファイルになるのだけど、世の中FTPできなくて専用のクライアントを共用されることもあって涙が出てくることがもうしょっちゅうあって困る。で、そんな_だめだめクライアント_に泣く泣くつきあわなければならないのだが、この際_なんでもかんでもExcelにお任せ_なのだ。
これからはASCIIモード転送のことは忘れて、すべてBINARYモード転送にしてしまいましょう。DOS/Windowsの世界ではUnixで作成したテキストは何行あっても、_たった1行のテキストファイル_と見なせるから、これを全部1つの文字列に取り込んで、ばらす方向で考える。ソースを示す。

2005年11月23日 水曜日

勤労感謝の日

今日は世間的には「勤労感謝の日」なのだが、僕の勤労を感謝してくれるような人なんていやしない。 働いていく上で襲いかかってくるのは、最近はソフトウェアなことしかやってないから、_ソフトウェア特許_とか_アイディア特許_だとかいった考えるだけでもうんざりするようなことしかありゃしない。ちなみに勤労感謝の日は皇室の新嘗祭にちなんだ祝日なので、_一般庶民の勤労を感謝している_と言う日ではないことを忘れちゃならない。

2005年11月22日 火曜日

なんでもかんでもExcel症候群

何でもかんでもPowerPoint症候群の弊害を日記で書いたのだが、それよりも世の中に広く広まっている病的な物と言えば、_なんでもかんでもExcel症候群_であろう。とにかく通常の表だけに飽きたらず、提出書類から報告書まで_何でもかんでもExcel_なのである。つまり「何でもかんでもExcel症候群」とはExcelだけですべての仕事が完結してしまう恐ろしい病気なのだ。
その病巣の由来を簡単に予想するとすれば、子供の頃に升目の入ったノートで漢字の書き取りをやらされ(つまりカーニングとかに無頓着になる)、読書感想文などの類は原稿用紙で書かされ、漢字は少ない文字数で情報量を詰め込めることからすっきりとした表が書きやすく、何でもかんでも_表にしないと気が済まない_という日本人の悲しい習性に由来する物であろうと思うのだ。
まぁUnixでEmacsしか使わないというのと似たような話ではあるのだが、典型的なEmacsユーザーが扱うのは汎用的なテキストファイルであり、Emacs LISPでがんがんプログラムを書く(設定ですらLISPを書かねばならないので、多少は誰でも書く物だ)人が多い用に思われる。Excelの場合は、XLS形式という特殊なフォーマット(最近のはXMLなのか?)を用い、適当なワークシート関数などを表層的に使いこなしている人が多く、Excelの基本技とも言えるピボットテーブルとかソルバーを使いこなしている人がどの程度いるかと問えば、結構怪しい物だ。
まぁ会社で働いているとこういう病的な世界と常に隣り合わせであり、いつも精神汚染を受けているのであるが、これを前向きに楽しむにはどうすればいいか? ということに焦点を絞り込んで生活しないとやってられないと言うことになるであろうか。
そんなわけでExcelをちゃんと使いこなすにはVBAで遊びまくればいいのであるが、テキストファイルとのつきあいもやめられない。Unixな環境に一度でも触れてしまうと、VBAのお気軽さを楽しんでいても感じる最大の問題点は_正規表現が使えない_と言うところがなやましい。これまで正規表現(とハッシュ)を使うためにVBAからだと駄目だと思い、Active PerlとかActive Rubyとか非VBAでCOMオブジェクトをさわれる言語を選択していたのであるが、書いたプログラムを使ってもらうのに_わざわざPerlだのRubyだのをインストールしてもらわねばならない_という痛い問題があった。Windowsで全然閉じていないのである。Mac OSXみたいにPerlとかRubyがインストールされていればこんなことは考えなくて良いのだが、PerlやRubyを使うのは_Windows的なやり方ではないのである_と言う結論に落ち着いた。
Windows的にどうすればいいのかと言う話なのだが、結局のところ現在のほぼすべてのオフィスにあるWindows環境で前提として良さそうな物は、Internet Explorer 6 SP2とExcelであろうと言うことになる。いろいろ調べているとIE5以降だと、WIndows Scripting Hostが使える。_まてよWSHにはたしか正規表現オブジェクトがあったぞ_と思い出して、さらにCOMで呼び出せるじゃんと言うことを思い出したので、一気にこの方面の悩みが解消した。要はWSHの正規表現オブジェクトをVBAのオブジェクトにしてしまえばいいのである。なんてこったい。こんなので数年悩んでたよ。とりあえず、あるディレクトリにある複数のファイルを選択して、そのすべてのファイルに、入力したパターンマッチをして置換を行うVBAプログラムを書いてみよう。

2005年11月17日 木曜日

「アルゴリズム+データ構造=プログラム」? 本当に?

福盛さんのプログラミングにおけるインターフェイスに関する考察。なかなか興味深く読ませていただいた。構造化の要件としての「アルゴリズム」と「データ構造」に加えて、プログラムになるには「インタフェース」も必要なのではないかという話。面白い視点だとは思うのだけど、はたしてそうなんだろうか?
プログラムという概念を考える際に人によってその規模が違うので、たしかに「アルゴリズム+データ構造=プログラム」というのは必ずしも自明ではない。(僕自身は「Σ(アルゴリズム×データ構造)=プログラム」ではなかろうかと思うのだけれども。) たとえば数行で記述可能な簡単なものから、Officeソフトのような大規模なものまで、どれもプログラムである。プログラムというものをどういうくくりで考えればいいのだろうか? 小規模なプログラムについては「アルゴリズム+データ構造=プログラム」と言う直感的な理解も可能であるが、福盛さんの考察は、構造化・モジュール化を進めた大規模なプログラムとなるとどうであろうかという論点であると思う。
僕はそもそも等号が成り立つような次元が同じ物ではないので階層化して考えたほうが自然だと思う。インターフェースやプログラムという概念は、「アルゴリズム」や「データ構造」のようなプリミティヴな存在であるか否か?という視点でかんがえたいのである。僕は「インターフェース」は「アルゴリズム」や「データ構造」とは同じ次元の存在ではなく、「アルゴリズム」と「データ構造」というプリミティヴな概念を演繹したようなもので記述可能ではなかろうかと思う。(公理論的アプローチなのかもしれないが…)
ではインターフェースというものをどう言う位置付けでおいておけばいいのかという話になるのであるが、インタフェースはその名のとおり、振る舞い(応答? 動作?なんて言うのかな)・データ・プログラム・外界との_相互作用_を考えた際にはじめて登場する概念だから、第1層目としてはアルゴリズム・データ構造、第2層目は第1層目の概念のみで記述可能であるインターフェース・プロシジャ・オブジェクト・プログラムというような階層的な理解でいいんじゃなかろうか? (プログラムを3階層目において置いた方がいいかな・・・整理悪いかも。)
ただしこれはプログラムの構成要素としてボトムアップして考えてみただけであって、実際のところプログラムが何でできているのかを考える際には実装詳細はどうでも良くて、インターフェースとその振る舞いが規定されていれば良いだけのような気がする。あとあの本はインターフェース云々以前の時代の本で、現代的なプログラミングとは若干の差があるのはあたりまえと思う。あくまで手続き指向な言語から構造化プログラミングへプログラミング・スタイルを切り替える提案をした本だという理解をすべきかと思うのだけど。ちゃんと読んでないから、なんとも。(Adaの本とかも今読むとふむふむと思うところはあるんだよねえ。Pascalに型総称性をいれてがちがちな仕様にしたらAdaになりそうだもんなあ。ただAdaにしてもPascalにしても好きではないな。)

2005年11月12日 土曜日

David and Leigh Eddings / 女魔術師ポルガラ 2 「貴婦人の薔薇」

女魔術師ポルガラの視点で語られるベルガリアード前史 Polgara the Sorceress の2冊目。とりあえず出版されたので購入。即読了。最近の文庫本は高いと思いつつ、読み終わるまでがあまりにも早すぎるのはどういうことか。
前巻からの引き続きでアレンディアの騒動の顛末をつける所からスタートし、微妙なバランスでアレンディアをコントロールしつつ、アレンディアの新しい女公爵・エラト女公爵として長らくアレンディアの歴史に関わることになった話が前半部分。アレンディアとエラト公国を元に育てたセンダリアに深い愛着をベルガリアード本編で見せるのはこういうことだったのかと少々理解が前進。
中盤では「魔術師ベルガラス」でさらっと語られたオントローズとの恋愛と別れ、ポルガラを助けるキレーンとその一族との交流と別れ、リヴァの後継者達との生活と別れ、ベルガラスの足跡とは異なって、ポルガラの足跡は人々と深く結びついているだけに、死によって愛しい人たちと別れなければならない、永遠の時間を生きる彼女の悲しみが痛い一冊なのである。
ベルガリアード前史も残り一冊。ポルガラの話はどうベルガリアードに続いていきのか目が離せないのだが、来月までが異様に長く感じる。

2005年11月07日 月曜日

第162回 NTT東日本 N響コンサート

「炎のコバケン」こと小林研一郎指揮で、NHK交響楽団のコンサートに行ってきた。コバケンさんは一昨年の大晦日のジルベスターコンサートで、カウントダウンにベルリオーズの「幻想交響曲」の第5楽章を予告通り9分31秒で指揮して、きっかりカウントダウンを終わらせたのを見て以来(実はリハやってなかったらしい)、お気に入りの指揮者である。ホールは東京オペラシティコンサートホール タケミツメモリアルホール。
コバケンがN響をどう乗せるのかと思って聴いてみる。1曲目はベートヴェンの「エグモント序曲」。曲はコンサートの導入には最適な長さではあるけど、重い雰囲気の名曲。しかしながら早速観客とオケを引きずり込む素晴らしい演奏であった。
2曲目は高木綾子さんをフルートソロに迎えて、モーツアルトのフルート協奏曲。コバケンさんは控えめに、高木さんのノリノリな演奏にこれまた引き込まれてしまった。よく演奏会の2曲目はフルート協奏曲を聴くことが多いのだが、古典な退屈さを感じることがあって、気持ちよくなり、挙げ句の果てにうとうとしちゃうことが多い(気分が良くなるのもいいことなのだ)のだが、これまた息をつかせぬ演奏で、目の覚めるような感じだった。高木さんのCDを買ってみようかなと思うくらい言い演奏だったと思う。
今日のメインディッシュという3曲目はドボルザークの「新世界より」。編成が大きかったこと、音が良くなっていたこともありますが、全休止の時にはぴたっと音が止まり、パフォーマンスも演奏もダイナミックでした。後半はあっと言う間に終わってしまったと言うくらい息を付かせぬ演奏だった。コバケンさんも「鳥肌が立つような感覚だ」とおっしゃっていたが、期待通り以上の演奏だったと思う。
アンコール曲はスラブ系の曲で来るだろうと思っていたら、僕が管弦楽曲で一番気に入っているブラームスの「ハンガリー舞曲第1番」でした。この曲は録音ではまとまった演奏になっちゃうのだが、アンコール曲の定番で、熱狂に包まれて深いロマンシズムとダイナミックさを兼ね備えた演奏が多くて好きな曲である。コバケンさんが「アンコールにハンガリー舞曲の1番」と言った瞬間に「やったー」と思ったのは言うまでもない。興奮の中でコンサートは無事終了。そんなわけで見に行って良かった・・・

2005年10月27日 木曜日

何でもかんでもPowerPoint症候群

前の職場は_何でもかんでもExcel_という会社であったが、今の職場はさらに何でもかんでもPowerPointで資料を作る風潮がある何とも言えないところだ。ちょっとした打ち合わせの資料(はっきり言ってグラフだけだったら、不満はあるにせよExcelやDelta Graphのグラフだけで十分)から業務引継まで、何でもかんでも呆れてしまうくらいPowerPointなのである。たしかにプレゼンするときはPowerPointの資料は凄くすっきりまとまって良いのだけど、いかんせんまとまりすぎちゃうのである。 特に業務引継をPowerPointでされちゃうと、あとで見ると項目しか残らないのである。 欲しい情報は項目ではなくて、その詳細なのだがどうして文章を書かないのだろう? 全く持って泣けてくる話である。
Wordを使いこなせとは言わない。どうせ今まであった人で僕以上にWordをちゃんと使いこなしている人を見たことがないので。せめて報告書や引継関係の書類はめんどくさがらずに、テキストファイルでいいからきっちり文章を書いて欲しいのである。
ビジュアルな物にだまされちゃいけない。学生の頃に「ワープロで書くと文章の校正能力が落ちるんだよ」といわれたことがある。綺麗な外見にだまされて中身のチェックがおろそかになるぞという教訓であろうと思うのだが、なんでも綺麗なプレゼン資料にするという傾向はおかしいという状態を越えて、すでに病的であろうと思うのである。(文章のことは人のことを言えるようなレベルには全然到達していないわけだけども。)