プログラムの中で変数を宣言する位置によって、使用できるかできないかが決まります。つまり、変数には有効範囲があります。これを変数のスコープと呼びます。次のような種類があります。
ブロックスコープは有効範囲がブロック内に限定されます。ブロックとは次の章で学習する制御構文のような開始と終了がある単位です。
次のプログラム例は、if文の中に宣言した変数を、if文の外で表示するために利用しようとしています。しかし、次の図のようにエラーとなります。ブロック内で宣言した変数はブロック内で使用できます。
プロシージャースコープは有効範囲がプロシージャ内に限定されます。プロシージャとは「Sub~End Sub」、もしくは「Function~End Function」で指定された単位です。ローカル変数と呼ばれます。
次のプログラム例は、「Main」プロシージャの中に宣言した変数を、Testプロシージャで表示するために利用しようとしています。しかし、次の図のようにエラーとなります。プロシージャ内で宣言した変数はプロシージャ内で使用できます。
モジュールスコープは有効範囲がモジュール・クラス・構造体内に限定されます。モジュールとは「Module~End Module」、クラスは「Class~End Class」、構造体は「Structure~End Structure」で指定された単位です。
次のプログラム例は、Module1モジュールの中に宣言した変数を、Testプロシージャで表示するために利用しようとしています。モジュールの範囲内であれば使用できるので、エラーにはなりません。