2005-07-24  Excel VBA―その後3―

先週,試作品ができました。いま試作品を運用しています。この話題,らいぞうたんとミニラさんしかついて来られない気がするのですが,気にしないで行きましょう(気にしたら負けです←なぞ)。

Excel for Macの文字エンコーディング

ファイル入出力のお話です。MacのVBAで入出力するテキストファイルの文字エンコーディングが何なのか気になっていたのだが,試してみたら「日本語(Mac OS)」でした。

「日本語(Mac OS)」はSHIFT-JISの拡張版で,Macの機種依存文字を網羅した文字エンコーディングのようです。WindowsでいうSHIFT-JISとCP932のような関係なのでしょう。

Mac OS Xって内部はBSDなので,EUCかUTF-8が使われているのではないかと想像していましたが意に反してSHIFT-JIS(の拡張)でした。

Propertyプロシージャに挑戦

独自のクラスモジュールをふたつ作りました。

VBAではクラスモジュールを使うことで,オブジェクト指向でいう「カプセル化」ができます。

クラスが持つ属性の値を変えたいときは,Propertyプロシージャを使うと便利らしい。VBAのPropertyプロシージャは「代入文でオブジェクトに副作用を与えることができる」という代物らしく,使ってみたら「なるほど」という動作をしました。

コレクションにする方法がまだ未調査

クラスモジュールをコレクション(一般にイテレータ:Iteratorと呼ばれているもの)にするにはどうしたらよいのでしょうか。For Each...Next構文を使って,独自に定義したクラスモジュールのインスタンスから繰り返し値を取り出したいのです。

安直に考えるとクラスモジュールに「Collection」というインターフェイスを実装(Implements)すればよい気がします。

でもそんなことがVBAでできるのか,まだ分かりません。分かったら続報をお知らせしようと思います。【追記 1 AUG 2005】現在のVBAでは無理みたいです。なおVB.netだとできるらしい。