ExcelWork.info

変数やプロシージャのスコープ(適用範囲)

変数やプロシージャのスコープ(適用範囲)


【構文:変数の宣言】

{ Dim | Private | Public | Static } varname [ As type , … ]


【項目の説明】

  • varname  ・・・  定義する変数名
  • type  ・・・  変数 varname のデータ型(省略するとバリアント型になります)。

Dim ステートメントは、変数を宣言し、メモリ領域を割り当てます。

Private ステートメントで宣言された変数は、宣言されたモジュール内でのみ参照できます。

Public ステートメントで宣言された変数は、Option Private Module が有効でない限り、すべてのアプリケーションのすべてのモジュールのすべてのプロシージャから参照できます。

Static ステートメントで宣言した変数 (静的変数) の値は、プログラムが実行されている間をとおして保持されます。


変数・定数の宣言の位置とその適用範囲

場所 キーワード 適用範囲
プロシージャ内 Dim 同一プロシージャ内
実行後、値は破棄される
Static 同一プロシージャ内
実行後も値は保持される
標準モジュール宣言部 Dim 同一モジュール内のみ
実行後も値は保持される
Private 同一モジュール内のみ
実行後も値は保持される
Public ブック全体
実行後も値は保持される
シート/ブックモジュール宣言部 Dim 同一モジュール内のみ
実行後も値は保持される
Private 同一モジュール内のみ
実行後も値は保持される
Public 同一モジュール内のみ
ただし「親オブジェクト」を装飾すれば使用可
 (例) ThisWorkbook.aaa
実行後も値は保持される
フォームモジュール宣言部 Dim 同一モジュール内のみ
フォーム終了時に値は破棄される
Private 同一モジュール内のみ
フォーム終了時に値は破棄される
Public 同一モジュール内のみ
ただし「親オブジェクト」を装飾すれば使用可
 (例) Form1.aaa
フォーム終了時に値は破棄される
クラスモジュール宣言部 Dim 同一モジュール内のみ
インスタンス終了時に値は破棄される
Private 同一モジュール内のみ
インスタンス終了時に値は破棄される
Public 同一モジュール内のみ
ただしインスタンスからは使用可
 (例) cc.aaa
インスタンス終了時に値は破棄される


プロシージャの適用範囲

場所 キーワード 適用範囲
標準モジュール Public(省略可) ブック全体
Private 同一モジュール内のみ
シートモジュール・ブックモジュール Public(省略可) 同一モジュール内のみ
ただし「マクロ」ボタン(開発タブ)からは実行可
Private 同一モジュール内のみ
フォームモジュール Public(省略可) 同一モジュール内のみ
ただし「親オブジェクト」を装飾すれば実行可
 (例) ThisWorkbook.myfunc()
Private 同一モジュール内のみ
クラスモジュール Public(省略可) 同一モジュール内のみ
ただしインスタンスからは実行可
 (例) cc.clsfunc
Private 同一モジュール内のみ

プロシージャ構文については、プロシージャを作成する( Sub, Function ) を参照してください。

モジュール宣言部に、Option Private Module が記述されている場合は、モジュール自体がプライベートとして宣言され、エクセルのツールバーにある「マクロ」ボタン(開発タブ)をクリックしたときに表示されるマクロの一覧にそのプロシージャは表示されなくなります。
ただし、別のモジュールからの実行は可能です(「Private」のついたプロシージャ以外)。また、プロシージャの中で宣言された変数は、そのプロシージャの実行中だけ有効で、キーワード Static により静的変数として宣言されていない限り、プロシージャの実行が、終了すると値は破棄されます。


変数やプロシージャのスコープ(適用範囲)使用例

サンプルVBAソース


実行結果