モジュール

■概要

モジュールとは特定の機能を表す変数や関数、クラスなどを集めた集合体を
作成するための機能のことです。
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プロジェクト、作成されているシートは
モジュールとして扱われています。

	tool_0039

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