HOME > 即効テクニック集 > Excel VBA > その他関連のテクニック > 複数のモジュールで変数を共有する
その他関連のテクニック

複数のモジュールで変数を共有する

(Excel 97/2000/2002/2003/2007)
変数を宣言するには、Dimステートメントを実行します。

Sub Sample1()
    Dim buf As String
    buf = "tanaka"
    MsgBox buf
End Sub   
一般的には、上記のようにプロシージャの内部で変数を宣言することが多いです。 このように、プロシージャの内部で宣言した変数は、宣言したプロシージャでしか使用できません。 上記の変数bufは、他のプロシージャで値を設定したり参照するとコンパイルエラーになります。 このような、プロシージャの中で宣言した変数を「ローカル変数」や「プロシージャレベル変数」などと呼びます。 複数のプロシージャで、同じ変数を共有するには、モジュールの宣言セクションで変数を宣言します。
Dim buf As String

Sub Sample1()
    buf = "tanaka"
    Call Sample2
End Sub   

Sub Sample2()
    MsgBox buf
End Sub   
Sample1を実行すると、Sample2が呼び出されて、Sample1で変数bufに格納した文字列"tanaka"が表示されます。 複数のプロシージャで変数を共有できたわけです。 宣言セクションで、Dimステートメントを使って宣言した変数は「モジュールレベル変数」または「プライベート変数」などと呼ばれます。 実はVBAには、プライベート変数を宣言するためのPrivateステートメントもあります。 宣言セクションで、Dimステートメントで宣言した変数と、Privateステートメントで宣言した変数は、どちらも同じ「プライベート変数」になります。
Private buf As String
このように、モジュールの宣言セクションで宣言した変数は、そのモジュール内のすべてのプロシージャで使用できます。しかし、この変数は「別のモジュール」で使用することはできません。 複数のモジュールで同じ変数を共有するには、変数の宣言に「Dimステートメント」ではなく「Publicステートメント」を使います。
Public buf As String
このように、すべてのモジュールで使用できる変数を「パブリック変数」あるいは「パブリックモジュールレベル変数」などと呼びます。