変数の適用範囲について
聞いてくれー!変数宣言をしたのに、なぜか使えないんだよ~
それはもしかしたら、変数の適用範囲を知らないからかもしれないね。
いっしょに見ていこう!
適用範囲ってなにー
これまでの、変数に関する記事はこちらになります。
変数は、宣言する場所などによって使えるところが限定されます。
これを変数の適用範囲などと呼びますが、一つずつルールをおさえておきましょう。
1. プロシージャの中で宣言した変数は、そのプロシージャの中でしか使えない。
2. プロシージャ外、モジュールの先頭に書くとそのモジュール内のどのプロシージャでも使用可能
3. プロシージャ外、モジュールの先頭にPublic変数として宣言すると他のモジュールでも使用可能
イメージがつきにくいと思うので実際のソースコードと図をいっしょにみていきましょう!
標準モジュールModule1に下記コードをコピー&ペーストしてください
Public monoo As String
Dim marukichi As String
Sub hensu_scope1()
Dim Jikken As String
Jikken = "aaa"
monoo = "bbb"
marukichi = "ccc"
End Sub
Sub hensu_scope2()
'MsgBox Jikken
MsgBox monoo
MsgBox marukichi
End Sub
標準モジュールModule2に下記コードをコピー&ペーストして下さい。
Sub hensu_scope3()
'MsgBox Jikken
MsgBox monoo
'MsgBox marukichi
End Sub
下記が図解になります。
1の例が変数Jikkenになります。この変数はプロシージャ”hensu_scope1″の中でしか使用できません。
仮に、コメントアウトを解除して、”hensu_scope2″の中で使用すると下記エラーメッセージが発生します。
2の例が変数marukichiになります。この変数では、プロシージャhensu_scope1()でも、hensu_scope2()でも使用可能です。ただしModule2のhensu_scope3()では使用できません。
3の例が変数monooになります。この変数では、プロシージャhensu_scope1()でも、hensu_scope2()でもModule2のhensu_scope3()でも使用可能です。
上記例でいうと、hensu_scope1()を実行した後、hensu_scope3()を実行した場合、変数monooはモジュールが異なりますが、Public変数として宣言しているため下記の通り変数が使えていることがわかります。
このように、どの場所で宣言するか?どのように宣言するか?が非常に重要です。
複数のプロシージャや標準モジュールで使用する変数である場合、Public変数として宣言する必要があることを覚えておきましょう。
まとめ
今日は変数の適用範囲について学びました。変数は宣言の仕方で適用範囲が異なるので注意しましょう。
次は、変数の初期値について学んでいきましょう。
コメント