アクセス上位ページ
 
最近の更新内容
(3)-b.変数の宣言を強制する ⇐ [PREV]
[NEXT] ⇒ (3)-d.定数の宣言

Excel VBA ≫ 1.基礎編 - 変数と定数(3)-c.変数のスコープ

変数のスコープ

変数のスコープとはその変数が有効な範囲のことです。 変数の宣言場所や宣言方法によりこのスコープが変わってきます。

標準モジュールに記述された変数はそのスコープに応じては以下の3つに分類できます。
  • プロシージャレベル変数
  • ・・・ プロシージャ内でのみ使用可能な変数
  • プライベートモジュールレベル変数
  • ・・・ 同一モジュール内のプロシージャから使用可能な変数
  • パブリックモジュールレベル変数
  • ・・・ 同一プロジェクト内のすべてのプロシージャから使用可能な変数




プロシージャレベル変数

プロシージャでDimステートメントを使用して宣言した変数をプロシージャレベル変数といいます。 この変数は宣言されたプロシージャ内でのみ有効となります。

プロシージャレベル変数はプロシージャが実行されるたびに自動的に初期化され、プロシージャが終了すると値は破棄されます。 変数の初期化時には、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に初期化され、 バリアント型 (Variant) 変数は、Empty 値に初期化されます。
    プロシージャレベル変数
  • Static変数
  • プロシージャ内ではStaticステートメントを使用して、Static変数を宣言することができます。 Static変数はプロシージャ終了後も値が保持されます。
    Static [変数名] as [データ型]
    


プライベートモジュールレベル変数

プロシージャで Dim または Private により宣言した変数をプライベートモジュールレベル変数と言いいます。

モジュールレベル変数はモジュールが読み込まれた初回にだけ初期化されます。 マクロが実行終了してもモジュールがリセット(変更されるなど)されない限り値が残っていますので注意してください。

※プロシージャの外であること
Dim [変数名] as [データ型]
Private [変数名] as [データ型]

以下のマクロはプライベートモジュールレベル変数"Count"が初期化されていないことを確認するテストです。

※エクセルを再起動するとまた1からカウントされます。
    プライベートモジュールレベル変数
  1. マクロ"sample3_M1"を実行を実行
  2. 初回実行時
  3. つづけて、マクロ"sample3_M2"を実行
  4. 2回目実行時

パブリックモジュールレベル変数

モジュールレベルでは Public を使用してパブリックモジュールレベル変数を宣言することができます。 パブリックモジュールレベル変数はプロジェクト内のすべてのプロシージャから使用可能です。
※プロシージャの外で宣言
Public [変数名] as [データ型]
標準モジュール以外のオブジェクトモジュール(シートやブック、ユーザーフォームなど)に記述したモジュールレベル変数(パブリック含む)はすべてプライベート扱いになります。

<サイト内関連リンク> 関連リンクもチェック!!
- モジュール内の構成とオプション
カテゴリ内ページ
Excel VBA 〜 総目次 〜
- 1.基礎編
-- (3).変数と定数
--- (3)-a.データ型と変数の宣言
--- (3)-b.変数の宣言を強制する
--- (3)-c.変数のスコープ
--- (3)-d.定数の宣言
--- (3)-e.組み込み定数
--- (3)-f.配列の宣言
--- (3)-g.オブジェクト変数と Set



Page
Top