モジュール
■概要
モジュールとは特定の機能を表す変数や関数、クラスなどを集めた集合体を
作成するための機能のことです。
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