ExcelVBAでクラスモジュールを使う場面

ExcelVBAでクラスモジュールを使う場面について

 このサイトでもExcelVBA(以下VBA)のクラスモジュールを配布していますが、VBAを使っている人が思う疑問の一つに「クラスモジュールってどこで使うの?」「クラスモジュールって使った方が良いの?」があると思います。
 そこで、正直どんなメリットがあるのか、どんな場面でクラスモジュールを使えばいいのかを簡単に説明したいと思います。

  


まず、ある特定条件下でなければ、基本的にクラスモジュールは使わなくても大丈夫です。(通常のモジュールで大丈夫です!!)

 「クラスモジュールを使えた方がカッコいい」とか、「世の中オブジェクト指向だから、これからはVBAでもクラスだぜ!!」とか、VBA(プログラミング)をやっている人は考えたりするかもしれないですが、そんなことは無いです。


 VBAでクラスが使えても、そんなにカッコ良くならないですし、オブジェクト指向なら[Python]や[java]で揉まれてきた方が勉強になります。
 それにVBAって事務的作業を効率よくするために使うことが多いので、それが通常のモジュールで達成できるのであれば、そっちで作った方が早いです。(クラスモジュールを作ると書く量は増えます)

  


 また、オブジェクト指向(クラスモジュールの理念的なもの)には【継承】という凄いパワーを持ってる機能があるんですが、これをVBAで実装しようとするとエライ事(下記図参照)になり、凄い機能なのに結局使われないという事があります。

  

ExcelVBAでクラスモジュールを使う場面
ExcelVBAでクラスモジュールを使う場面

  


これらの特徴を押さえたうえで、どんな場面で使うかですが…

 まず、一つ目はAさんBさんCさん…など、不特定多数の人にモジュール(幾つかの機能がまとまった物)を配布する場合や、不特定多数のVBAに組み込む場合にはクラスモジュールの方が便利です。
 その理由ですが、オブジェクト指向の凄い機能の一つに【カプセル化】と呼ばれるものがあり、この【カプセル化】が不特定多数にモジュールを配布するときに役立ってくれます。
 具体的には通常のモジュールを不特定多数に配布した場合、変数や関数名が重複しエラーとなる可能性がありますが、クラスモジュールではこの様な事は【カプセル化】機能によって発生しません。

  

 二つ目ですが、末永く使う「結構大きいシステム」など、色々な人に引き継ぐ可能性があるシステムの場合には、クラスモジュールを使った方が便利です。
 その理由として、一般的にクラスモジュールを作成していくとそこに機能が集約され、決まった役割を果たす物が出来ていきます。そのため、使い方などのマニュアル化がしやすく、後の人に引き継ぐ時に少し楽になります。
 また、クラスモジュールの書き方には一定の制限が発生するため、ほんの少しだけ可読性が向上し、改善や修正をしやすくするための手助けとなります。

  


 これら二つが、VBAでクラスモジュールを使用した方が良いと考える場面で、これらの場面以外では無理してクラスモジュールを使わなくても良いんじゃなかなとは思います。

 最後に、クラスとかオブジェクト指向の勉強がしたいというのであれば、ちゃんとオブジェクト指向をサポートしている言語で勉強した方が理解は深まると思います。
 VBAでクラスやオブジェクト指向を勉強しても、犬や猫の鳴き声オブジェクトの作成で終わってしまい、結局何も理解できないままになる可能性があるので、注意が必要です。