ExcelWork.info

Excel(エクセル)のマクロ・VBA・関数・操作などのメモ

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

      2015/08/26

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


【構文:変数の宣言】

{ 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ソース


実行結果

適用範囲(スコープ)例




 - 構文 , , , , , , , , , ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  関連記事

for_next ステートメント例
繰り返し処理(For…Next ステートメント)

For…Next ステートメントの使い方 【構文】 For coun …

With ステートメントを使う

With ステートメントを使う With ステートメントを使うことで、1度指定し …

配列が引数のプロシージャ 例1
配列が引数のプロシージャを作成する

配列が引数のプロシージャを作成する 【構文】 { Sub | Function …

省略可能な引数・デフォルト値を設定( Optional キーワード )

Optional キーワード Optional キーワードを使用するとプロシージ …

引数の参照渡し・値渡し( ByRef, ByVal )

引数の「参照渡し」と「値渡し」 「参照渡し」とはプロシージャに引数として変数を渡 …

プロシージャ作成 例
プロシージャを作成する( Sub, Function )

プロシージャを作成する プロシージャとは、実行時に 1 つの単位として処理される …

GoSub ステートメント
プロシージャ内のサブルーチンへ移動(GoSub…Return ステートメント)

GoSub…Return ステートメント GoSub ステートメント …

setステートメント使用例 1
set ステートメントを使う

Set ステートメントを使う 【構文 1】 Dim objectvar [ As …

引数を可変にする( ParamArray )

ParamArray キーワード ParamArray キーワードを使用すると任 …

プロシージャを呼び出す(Call ステートメント)

プロシージャを呼び出す プロシージャ内から、別のプロシージャを呼び出すには、Ca …