作成日 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.の商標または登録商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。