変数のスコープ
変数のスコープとは変数の適用範囲を表します。
適用範囲とは(○○の場所で宣言をした変数は△△の範囲では宣言できない)など、具体的にはその変数がどこで使えるかということを表します。
変数の適用範囲(どこでそれぞれの変数を使うことができるか)を知るためにはVBAの中にはどのような場所(モジュールといいます)があるのかをまず覚える必要があります。
モジュールの種類と説明
VBAには色分けした4つのモジュールが存在します。
1つ1つ説明していきます。
シートモジュール
赤線で囲まれた範囲をシートモジュールと言います。シートモジュールは初期設定の状態(エクセルを開いて何も変更していない状態)では[ Sheet1 ]のモジュールは一番上にある[ Sheet1(Sheet1) ]になります。
しかし上の画像にあるようにエクセルのシート画面で[ シートの見出し ]から[ 名前の変更 ]を行っていた場合、シートモジュールに表示される名前が変わってきます。
変更したシート名はシートモジュールの( )内に記入されます
例:Sheet1をシート1という名前に変更した場合
Sheet1(Sheet1) ⇒ Sheet1(シート1) に変更されます。
ブックモジュール
青線で囲まれたThisWorkbookと表示されているものがブックモジュールです。自動で実行するマクロなどはブックモジュールに書き込みます。
フォームモジュール
オレンジの線で囲まれたモジュールがUserFormです。このモジュールはユーザーフォームを操作するマクロを書き込む場所になります。VBEで[ 挿入 ]から[ ユーザーフォーム ]を選択するとフォームモジュールを使うことができるようになります。
標準モジュール
緑の線で囲まれたModule1を標準モジュールといいます。 この標準モジュールはマクロを書き込む場所であり、記録されたマクロを実行すると挿入されるモジュールです。VBEからは[ 挿入 ] ⇒ [ 標準モジュール ]を選択することでも表示させることが可能です。
このようにVBAには種類の異なる複数のモジュールが用意されています。
次にどんな変数がいくつのモジュールで使われるのか、説明していきます。
ローカル変数(プロシージャ間での適用範囲)
1つのモージュール内で宣言したプロシージャでしか使うことができません。
モジュールレベル変数(宣言をしたモジュール内にある全てのプロシージャ)
複数のモジュールを使って変数を使用します。今回の例は標準モジュールです。
Module1 , Module2で変数の宣言をします。
そのまま宣言したのではエラーが発生してしまうので「パブリック変数」というものを使います。