【VBA学習】ローカル変数とグローバル変数を覚えよう!

  • このエントリーをはてなブックマークに追加

これまで使ってきた変数は、実は「ローカル変数」「グローバル変数」という大きく分けて2種類の変数があります。

今回はこの2つの変数について紹介していきます。

グローバル変数とローカル変数の違い

2つの変数の意味

結論から言うと、この2つの変数は「呼べる範囲」が違います。

 

「グローバル」隔てがなく広い範囲というイメージですよね?

それに対し「ローカル」狭い空間で閉じこもっているようなイメージだと思います。

 

このように、変数にも国際的(笑)な変数と地方のご当地オンリーな変数が存在します。

 

具体的にどのように違うのか見ていきましょう。

 

ローカル変数を知ろう

唐突ですが、下のコードを見てみましょう↓

 

関数「Kansu1」で変数「Hensu」を宣言し、「Hensu」に「Hello!」という文字を代入しています。

そして、関数「Kansu2」を呼び出して、「Kansu2」の中で「Hensu」の値をメッセージで表示させようとしているかんたんな処理文です。

この処理を実際に動かしてみます。

するとこのような結果になりました↓

 

メッセージボックスの中に何も表示されていません。

本当なら、「Hensu」の中にある値「Hello!」が取れていてもいいはずなのに。

 

これは、関数「Kansu1」の中で宣言した変数「Hensu」が関数「Kansu2」では読み取れていないため、「Hello!」の値が取れていなかったのです。

 

もっと厳密にいえば、関数「Kansu2」で呼んでいる「Hensu」と関数「Kansu1」で宣言した「Hensu」は全くの別物です。

関数「Kansu2」の「Hensu」は、「Kansu2」で作られた別物の変数だったのです。

(実は、変数は宣言せずに使用することが出来るのですが、おすすめ出来ません。)

 

分かりづらかったと思うので、別の例も見てみましょう↓

 

今度は関数「Kansu1」「Kansu2」のそれぞれで同じ名前の変数「Hensu」を宣言しています。

「Kansu1」では「Hensu」に10という値を入れています。

「Kansu2」では「Hensu」にプラス1した値を入れています。

さあ、今度はどうなるでしょうか?

実行するとこのような結果になりました↓

 

「Kansu1」の「Hensu」のやり取りはガッツリ無視して、「Kansu2」の「Hensu」の状態しか見ていません。

「Kansu2」の「Hensu」は宣言されただけで値は入っていなく、プラス1した値を「Hensu」に代入しているため、1と表示されています。

 

このように、宣言された関数の中でのみ読まれる変数の事を「ローカル変数」と呼びます。

これまでの学習で出てきた変数たちは全てこの「ローカル変数」です。

 

グローバル変数を知ろう

ローカル変数と対をなす存在が「グローバル変数」です。

グローバル変数は、これまでのローカル変数と逆で、モジュール内に書かれた関数のどこからでも呼ぶことが出来る変数です。

 

変数をどの関数にも属さない、関数の外に宣言することでグローバル変数を作る事が出来ます。

下の画像の一番上の行がグローバル変数の宣言です。

 

グローバル変数は、一連の処理の中で関数をまたいで呼び出して、値を変更したい場合に便利な変数です。

実際にグローバル変数を使ってみます。

例として、下のコードを見てみましょう。

 

グローバル変数の「Hensu_G」を関数「Kansu1」で呼び出して「10」を代入しています。

その後、関数「Kansu2」を呼び出し、「Kansu2」で「Hensu_G」にプラス1しています。

 

上で紹介した「ローカル変数」の場合は、関数「Kansu2」で新しい変数として作成され、「Kansu1」で処理した部分を全部無視して計算していました。

 

今度はどうなるでしょう?

実行した結果はこちらです↓

 

今度は「Kansu1」で「Hensu_G」に「10」を代入したことも「Kansu2」に引き継がれていますね。

このように、関数間の隔てなく共通的に呼び出すことが出来る変数を「グローバル変数」と言います。

 

グローバル変数とローカル変数の使い分け

基本的に、関数ごとにグローバル変数を宣言して使うのが無難です。

グローバル変数は、共通的に読み込みたい&編集したい値がある場合のみ宣言して使用します。

なので、グローバル変数はあまり乱用せず、出来る限りローカル変数を使うようにするといいと思います。

その方が、わけわからなくならなくて済み、コードの可読性が高くなります。

 

ちなみに、こんな場合はグローバル変数よりもローカル変数の呼び出しが優先されます。

関数「Knasu2」で、グローバル変数と同じ名前の変数「Hensau_G」を宣言しています。

この場合、出力される結果は下のようになりました↓

 

ローカル変数でも同じ変数名が宣言されている場合、ローカル変数の方を優先して呼び出しているので、思わぬ不具合を作らないようグローバル変数を宣言する時は名前の付け方に十分注意しましょう

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*