モジュール
■概要
モジュールとは特定の機能を表す変数や関数、クラスなどを集めた集合体を 作成するための機能のことです。 C++やC#のnamespace、Javaのパッケージなどが近しい機能です。 VBAのシートやブックの中身はモジュールが使用されています。
■宣言
●書式 ・書式例 Module モジュール名 End Module ・具体例 Module Sheet1 End Module
■使用
●書式 ・書式例 モジュール名.メンバ ・具体例 Module Sheet Public Dim TestVal As Long End Module Sub Test Sheet.TestVal = 10 End Sub
■VBAにおけるモジュール
VBAでは最初に説明したとおり、シートやブックがモジュールとして扱われています。 これはVBAのエディタでの階層で表示してされているように 「.xlsファイル」を1つのVBAプロジェクト、作成されているシートは モジュールとして扱われています。VBAのモジュールには「.xlsファイル」に依存している「シートモジュール」と 依存していない「標準モジュール」があります。 ※ブックモジュールはシートモジュールと同様に「.xlsファイル」に依存しています。 ●シートモジュール シートモジュールはExcel本体のシートとリンクしているモジュールです。 例えば「Sheet1」というシートモジュールがあれば それはExcelのSheet1のシートの情報を取得、変更が可能なモジュールです。 Excelのシートを消せばエディターの該当するモジュールも削除されます。 ●標準モジュール 標準モジュールはシートモジュールのようにどれかのシートに依存しておらず、 VBAプログラム専用の独立したモジュールです。 各シートで共通で行う処理がある場合はこの標準モジュールに プロシージャとして処理を作成すると 別のモジュールで汎用的に使用することができます。
■モジュールとクラスの違い
モジュールとクラスはともにシステムに必要な変数や関数をまとめるための機能です。 しかし、モジュールとクラスは以下の違いがあります。 ●インスタンス化の必要の有無 クラスを使用するにはインスタンス化(Newによる作成)が必要ですが、 モジュールはインスタンス化する必要なくそのまま使用可能です。 この特性がモジュールとクラスのメリット、デメリットとなっています。 例: Module Module1 Public Dim ModuleVal As Long End Module Class Class1 Public m_ClassVal As Long End Class Sub Test() Module1.ModuleVal = 100 Dim cls As New Class1 cls.m_ClassVal = 1000 End Sub ●メリットとデメリット ・メリット モジュール: ・インスタンス化の必要がない ・単一を保障されている クラス: ・インスタンス化した数だけ同じ機能を持った インスタンスを作成できる ・デメリット モジュール: ・同じモジュールを複数作成できない クラス: ・インスタンス化が必須 ・単一ではない 上記のようにメリット、デメリットがあるのでクラスにするか、 モジュールにするかは作成する機能の内容の特性を踏まえて作成を行います。 ●モジュールとクラスの注意 モジュールの中にクラスを定義することは可能ですが、 クラスの中にモジュールの定義を行うことはできませんので、注意して下さい。 問題例: Class Class1 Module Module1 End Module End Class 成功例: Module Module1 Class Class1 End Class End Module
VBAのモジュールには「.xlsファイル」に依存している「シートモジュール」と
依存していない「標準モジュール」があります。
※ブックモジュールはシートモジュールと同様に「.xlsファイル」に依存しています。
●シートモジュール
シートモジュールはExcel本体のシートとリンクしているモジュールです。
例えば「Sheet1」というシートモジュールがあれば
それはExcelのSheet1のシートの情報を取得、変更が可能なモジュールです。
Excelのシートを消せばエディターの該当するモジュールも削除されます。
●標準モジュール
標準モジュールはシートモジュールのようにどれかのシートに依存しておらず、
VBAプログラム専用の独立したモジュールです。
各シートで共通で行う処理がある場合はこの標準モジュールに
プロシージャとして処理を作成すると
別のモジュールで汎用的に使用することができます。
