VBAでグローバル変数を定義する方法(モジュールレベル変数)
タイトルにグローバル変数と書きましたが、厳密にはVBAにはグローバル変数はありません。
一般的にグローバル変数はどの場所からも参照できる変数のことです。
VBAでこれに該当する変数はモジュールレベル変数になります。
今回はこのモジュールレベル変数がどのようなものかを紹介します。
VBAのグローバル変数(モジュールレベル変数)とはどのようなものか
変数宣言の方法
'モジュールの先頭
Public pubAbc As String 'Public:他のモジュールからも参照可能
Private priAbc As String 'Private:他のモジュールからは参照不可
Sub Procedure()
End Sub
先にモジュールレベル変数の宣言方法について説明します。
モジュールレベル変数はモジュール(標準モジュールやシートモジュールなど)の先頭に記載します。
正確にはプロシージャよりも上に記載すればモジュールレベル変数になります。
モジュールレベル変数のスコープ
'モジュールの先頭
Public pubAbc As String 'Public:他のモジュールからも参照可能
Private priAbc As String 'Private:同じモジュール内から参照可能
変数のスコープはPublicで宣言するかPrivateで宣言するかにより変わります。
Publicで宣言すると一般的にいうグローバル変数になります。
どのモジュールのプロシージャからも参照可能な変数となります。
VBAでグローバルな変数を作りたい場合はモジュールの先頭に記載してPublicで宣言すると覚えてください。
PublicとPrivateの違い
モジュールレベル変数は、Publicで宣言したときとPrivateで宣言したときでスコープ(参照可能な範囲)が違います。
PublicとPrivateの違い | |
---|---|
Public | どのモジュールのプロシージャからも参照可能 |
Private | 同じモジュールのプロシージャから参照可能 |
スコープ(参照可能な範囲)の違いをまとめると、↑の表のようになります。
Publicで宣言すると、どのモジュールからも参照可能となります。(例えば、Module1の変数にModule2から参照できる)
Privateで宣言すると、同じモジュールのプロシージャから参照可能となります。
逆にいうと、他のモジュールからは参照することができません。
他のモジュールからも参照したいときはPublicに、同じモジュールからしか参照しないときはPrivateと、使い分けておくのがGoodです。