作成日 2008/5/27
最終更新日 2010/5/15

標準モジュール、クラスモジュール、ユーザーフォーム

 エクセルVBAでは標準モジュール、クラスモジュール、ユーザーフォームの3種類のモジュール(※1)を作成することが出来ます。
 このページではこの3つのモジュールの特徴と、どのようなときに使用するのかについて説明します。

-----
※1:正確にはドキュメント(ワークシート、ThisWorkbook)も考えるべきだが、ここでは説明しません。

1.標準モジュールについて
2.クラスモジュールについて
3.ユーザーフォームについて
4.まとめ


1.標準モジュールについて

 標準モジュールの特徴は以下の通りです。
  1. オブジェクトが生成できない(newできない)です。
  2. モジュール内でMeキーワードはもちろん使用できないです。
  3. ここで定義したフィールドは、エクセルが動作している間は有効です。
  4. このモジュール上で定義したフィールド・メソッドは、クラススコープのフィールド・メソッドとなります。
 標準モジュールは以下の場合に使用されます。オブジェクト指向の場合は標準モジュールは必要ないと考える人もいるようですが、標準モジュールは必要です。
  1. ユーティリティクラス(※1)を実装したい場合。
  2. あるクラス(クラスモジュールかユーザーフォーム)のクラススコープのメソッドorフィールドを実装したい場合。
    この場合、別のクラスからアクセスできるようにする必要があるため、アクセス修飾子をpublicにする必要があります。 
-----
※1:ユーティリティクラスとはjava.lang.Mathクラス のように、単なる計算や関数を集めたクラスで、インスタンスを生成できないクラスのことです。UML上では<<utility>>をつけて表記します。
このページのトップへ

2.クラスモジュールについて

 クラスモジュールの特徴は以下の通りです。
  1. オブジェクトが生成できます(newできる) 。
  2. コンストラクタの引数は取れないです。
  3. 生成したオブジェクトは参照数が0になるとすぐさま解放されます(参照カウンタ方式によるガーベッジコレクション)。
    このときTerminateイベントが発生します(※1)。 
  4. このモジュール上で定義したフィールド・メソッドは、インスタンススコープのフィールド・メソッドとなります。
    クラススコープのフィールド・メソッドは定義できないので、その場合は標準モジュールを使用するしかありません。
 クラスモジュールは以下の場合に使用されます。
  1. 具象クラスを実装したいとき
    なお、エクセルVBAでは抽象クラスは作成できません。インタフェースであれば、VBAのバージョンが6以上であれば作成可能です。 
  2. VBAにはユーザコントロールがありません(VB6.0にはある)。それの代わりとしてクラスモジュールを使えます。
-----
※1:エクセルが異常終了したり、Endステートメントにより強制終了した場合はTerminateイベントは発生しません。
このページのトップへ

3.ユーザーフォームについて

 ユーザーフォームの特徴は以下の通りです。
  1. 基本的にはクラスモジュールと同じです。
    ただし、何もしなくてもユーザーフォームと同名のオブジェクトが勝手に作成される(このため、標準モジュールと同じように考える人がいるのですが違います)のと、オブジェクトをMSForms.UserFormクラス型にキャストできるのが違う。
 ユーザーフォームは以下の場合に使用されます。
  1. 画面系のクラス(※1)を実装する際に使用します。それ以外に使い道が無いと思いますが・・・。
-----
※1:基本的にはモーダルダイアログです。ただし、VBAのバージョンが6以上の場合はモードレスダイアログも作成可能です。
このページのトップへ

4.まとめ

 まとめると、以下のようになります。

 

標準モジュール

クラスモジュール

ユーザーフォーム

オブジェクトの作成

×

その他の特徴 ・フィールドは、エクセルが動作している間は有効 ・参照数が0になるとTerminateイベントが発生し、オブジェクトが破棄される ・なぜか、ユーザフォームと同名のオブジェクトが生成される
使用用途 ・クラススコープのフィールド、メソッドの実装
・ユーティリティクラスの実装
・インスタンススコープのフィールド、メソッドの実装
・具象クラスの実装
・画面系クラスの実装

Prev Up Next  Top
このページのトップへ

このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
OMG、UML、Unified Modeling Languageは、Object Management Groupの商標または登録商標です。
JavaおよびJavaに関する商標は、米国およびその他の国における米国Sun Microsystems, Inc.の商標または登録商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。