おそらく多くのVBAユーザーが「クラスモジュールの使い方がよく分からない」状態だと思います。

そこで、クラスモジュールの体験ができる手はずを書いてみます。


人にもよると思いますが、標準モジュールには「だいたいの用途別」に分けていませんか?「数字のチェック関数はこのモジュール」「シートの装飾はこのモジュール」など。それをしているならクラスファイルにはすんなり受け入れられるでしょう。

それをしていない人は、安易に手を出さない方がいいかもしれません。


---

さて、用途別に分かれているならクラスモジュールを追加し、どれか1つの標準モジュールを選び、まるまる内容をクラスモジュールにコピーします。クラスモジュールの名は「Class1」かと思います。いったんこのままで進めます。

もし、すべてPrivateのプロシージャや関数なら、呼び出せるようにPublicモジュールにしましょう。


---

次に標準モジュールを一つ追加します。これも特にモジュール名を変えなくていいです。

ここには

Public C as New Class1


と記載します。もし別にC を使っているなら任意のもので結構です。


---

更に実験用に標準モジュールを追加します。

そこには

Public sub Test_1()


End Sub


と記載します。さてこのプロシージャ内で下の赤文字のように入力してください。

Public sub Test_1()

  C.

End Sub


この C.(ピリオド)を打った瞬間、先ほど作ったクラスファイルのプロシージャとファンクションが展開されます。リソース不足で展開されないこともたまにありますが・・。


これで元の標準モジュールと等価な処理がクラスファイルで使えます。


------------------------

で、「それってメリットあるの?」という質問が来そうです。


用途に分けてある、というところがミソでして

「数字のチェック関数はこのモジュール」 クラス名を NUMCHK

「シートの装飾はこのモジュール」 クラス名を SHTITL

などにしておけば、そのクラス群の中にあるのは例えば「数字チェック用関数」となりますので、関数名を長ったらしくしなくて済みますし、前方に修飾子が付くのでざっと眺めたときに「ここで何らかの数字のチェック」と、関数名を正確に読み取らなくてもよくなります。

つまり、クラス名さえ知っていれば保守時に可読性が上がり、作成時にもポップアップで出てきたとこから関数が探せ生産性が上がる、ということになります。



---

今回は体験、ということで分かりやすいよう常駐クラスを作りました。

通常クラスは「使うときに生成し、使い終わったら破棄する」のが一般的です。私もデータベースアクセスに使うクラスはそうしています。

VBAでは継承ができません。頻繁に使う共通処理的なものは今回の例のように常駐させておいた方が使いやすいでしょう。そのあたりのさじ加減は慣れてくればご自分で決められるでしょう。


次回はもう少しクラスファイルについて掘り下げてみます。


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