作成日 2008/5/27
最終更新日 2010/5/15
標準モジュール、クラスモジュール、ユーザーフォーム
エクセルVBAでは標準モジュール、クラスモジュール、ユーザーフォームの3種類のモジュール(※1)を作成することが出来ます。
このページではこの3つのモジュールの特徴と、どのようなときに使用するのかについて説明します。
-----
※1:正確にはドキュメント(ワークシート、ThisWorkbook)も考えるべきだが、ここでは説明しません。
標準モジュールの特徴は以下の通りです。
- オブジェクトが生成できない(newできない)です。
- モジュール内でMeキーワードはもちろん使用できないです。
- ここで定義したフィールドは、エクセルが動作している間は有効です。
- このモジュール上で定義したフィールド・メソッドは、クラススコープのフィールド・メソッドとなります。
標準モジュールは以下の場合に使用されます。オブジェクト指向の場合は標準モジュールは必要ないと考える人もいるようですが、標準モジュールは必要です。
- ユーティリティクラス(※1)を実装したい場合。
- あるクラス(クラスモジュールかユーザーフォーム)のクラススコープのメソッドorフィールドを実装したい場合。
この場合、別のクラスからアクセスできるようにする必要があるため、アクセス修飾子をpublicにする必要があります。
-----
※1:ユーティリティクラスとは
java.lang.Mathクラス
のように、単なる計算や関数を集めたクラスで、インスタンスを生成できないクラスのことです。UML上では<<utility>>をつけて表記します。
クラスモジュールの特徴は以下の通りです。
- オブジェクトが生成できます(newできる) 。
- コンストラクタの引数は取れないです。
- 生成したオブジェクトは参照数が0になるとすぐさま解放されます(参照カウンタ方式によるガーベッジコレクション)。
このときTerminateイベントが発生します(※1)。
- このモジュール上で定義したフィールド・メソッドは、インスタンススコープのフィールド・メソッドとなります。
クラススコープのフィールド・メソッドは定義できないので、その場合は標準モジュールを使用するしかありません。
クラスモジュールは以下の場合に使用されます。
- 具象クラスを実装したいとき
なお、エクセルVBAでは抽象クラスは作成できません。インタフェースであれば、VBAのバージョンが6以上であれば作成可能です。
- VBAにはユーザコントロールがありません(VB6.0にはある)。それの代わりとしてクラスモジュールを使えます。
-----
※1:エクセルが異常終了したり、Endステートメントにより強制終了した場合はTerminateイベントは発生しません。
ユーザーフォームの特徴は以下の通りです。
- 基本的にはクラスモジュールと同じです。
ただし、何もしなくてもユーザーフォームと同名のオブジェクトが勝手に作成される(このため、標準モジュールと同じように考える人がいるのですが違います)のと、オブジェクトをMSForms.UserFormクラス型にキャストできるのが違う。
ユーザーフォームは以下の場合に使用されます。
- 画面系のクラス(※1)を実装する際に使用します。それ以外に使い道が無いと思いますが・・・。
-----
※1:基本的にはモーダルダイアログです。ただし、VBAのバージョンが6以上の場合はモードレスダイアログも作成可能です。
まとめると、以下のようになります。
|
標準モジュール |
クラスモジュール |
ユーザーフォーム |
オブジェクトの作成 |
× |
○ |
○ |
その他の特徴 |
・フィールドは、エクセルが動作している間は有効 |
・参照数が0になるとTerminateイベントが発生し、オブジェクトが破棄される |
・なぜか、ユーザフォームと同名のオブジェクトが生成される |
使用用途 |
・クラススコープのフィールド、メソッドの実装
・ユーティリティクラスの実装 |
・インスタンススコープのフィールド、メソッドの実装
・具象クラスの実装 |
・画面系クラスの実装 |
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メールをお願いします。
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.の商標または登録商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。