非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

裏ワザ!? VBAで自作クラスをジェネリックコレクションにまとめることができた

   

[ad#top-1]

会社で使っている関係上、VBAの触れる機会が多いのですが、非オブジェクト指向言語特有のグチャグチャ感が否めないし、あまり好きではありません。それでも我慢して使っている私に朗報が。ナント自作クラスをコレクションにまとめることができるみたい。ネットで探しても出てこなかったのですが、ダメもとで試したら出来たので、ちょっと裏ワザっぽい。

ちなみにC#だったら、

List <MyClass>classList = new List<MyClass>();
classList.Add( new MyClass("山田太郎", 28) );

 

Javaだったら、

LinkedList <MyClass>; classList = new LinkedList<MyClass>();
classList.add( new MyClass("山田太郎", 28) );

 

というコードになります。
※MyClassは自作クラス。氏名と年齢を格納する(という前提)

じゃあ、VBAはどうやってやるかというと、実は以前紹介した2つの機能を合体させるだけです。
VBAで連想配列使えるなんて知らなかった
VBAでオブジェクト指向プログラミング

 

Set classList = CreateObject("Scripting.Dictionary")
Set クラス = New MyClass
クラス.setting "山田太郎", 28
classList.Add 1, クラス

 

クラスの作成方法は以前の記事「VBAでオブジェクト指向プログラミング」を参照ください。連想配列に突っ込めたという点が斬新ではないかと。

↓こんな感じ。

 

ところで、この機能ができると何が良いのかというと、データーベースのレコードを格納するのに適しているからです。色々な属性が含まれたフィールドをクラスで表現して、レコードをコレクションでまとめることができます。読み込んだデータベースをExcel表へ読み出すことも可能ですが、セルの読み書きには時間がかかるという難点があります。

C#やJavaに比べれば手数がちょっと多いですが、まあ、これでVBAの使い勝手がかなり向上すると思います。

ただ、以前、このやり方をGoogle+で紹介したら、外人から笑われてしまいましたが・・・。(笑)

gp

[ad#ad-1]

スポンサーリンク

 - Excel, VBA