クラスモジュールの特徴を挙げ、標準モジュールとの差異を比べてみましょう。

【明示的に使える状態にしてやらないと使用できない】

標準モジュールのプロシージャや関数は記載しておけば使えます。しかし、クラスモジュールで書かれていることは「明示的に使える状態にしてやらないといけない」ということです。

VBAは基本的にローカルコンピュータで動作するので意識することはないですが、サーバーや汎用機で稼働するプログラムの場合、同時に同じプログラムが呼び出されることはあります。その際のサーバー上の資源を節約するための手法くらいに考えて頂ければと思います。(これではちょっと説明不足ですが・・)


クラスモジュールは、Newで生成されます。前回の例では変数定義時にNewキーワードを使っていましたが、一般的には変数定義時にはNewを使わず、利用時に必要に応じて生成します。

Dim C As Class1 '前回からNewを省いた形


Set C = New Class1  'このように Set でクラスを生成する。


使い終わったらクラスを破棄しましょう。


Set C = Nothing  'このように Set でクラスを亡き者にしてしまう。


これがクラスモジュールのライフサイクルです。一度破棄したら二度と使えない訳ではなく、再利用が可能です。



【Publicなプロシージャや関数でも同じ名前が使える】

標準モジュールではPublicにすると名前が一意になるように気を付けなければいけません。が、クラスファイルでは前方に修飾子が付くので、同じプロシージャ名、関数名が使えます。


【同じものを複数生成できる】

処理を複数生成してもあまり意味はないかもしれませんが、データ群を複数生成したくなることはありませんか?

例えばフォーム1とフォーム2で同様のデータ群を持つなら、定義は1つにしたいものです。

また、状態によって「現在フォームに出して操作している値」と「直前の状態」を持つにも、定義は1つにできるといいですね。

そういう際、

Dim C1 As New Class1

Dim C2 As New Class1

などと、複数生成でき、もちろんお互いの内容は独立しています。


私がよく使うのはオリジナルのデータ型をクラスで定義しています。

2次元のテーブルでStringとLongを混ぜ、ある項目に値が入れば計算結果を別の項目に設定などをしたります。

もう少し洗練して、場合によってはエラーも返すインテリジェントなデータ型(と勝手に呼んでいる)も実験的に作ったりしています。



【ポリフォーフィズムを使える】

Publicなプロシージャや関数でも同じ名前にしておくことが前提ですが、ポリフォーフィズムを使えます。

オブジェクト指向言語を体験していないと聞き慣れない言葉でしょう。

通常、処理の流れが同じでも類似したことは別のロジックが必要です。人によっては流れは同じだからと、処理の途中途中にIF文を入れていく人もいるでしょう。

これを「オブジェクトを切り替えることで処理の流れを共有する」という技が使えます。


おそらく「はぁ?」って感覚でしょう。従来の考え方とは180度考え方が違うので、ここだけで説明をできないでしょう。

今回はJavaのものですが、参考書籍を挙げておくことにします。

 
オブジェクト脳のつくり方 (CD-ROM付)
¥2,800
株式会社 ビーケーワン


いずれExcelVBAでのサンプルプログラムを作って体験していただこうと思います。



※書き直し /八月末削除予定 /クラスモジュール基礎