ExcelVBAを1から学ぶ! #6 ~変数の有効範囲 (スコープ)~


はじめに

前回のおさらいと今回やること

前回は、変数のデータ型に関して説明しました。
今回は、変数のスコープについて学習していきましょう。

変数のスコープとは?

スコープとは範囲のこと

スコープとは何かというと、有効範囲のことです。変数は宣言時にその有効範囲を指定することが可能です。

モジュールレベル変数とプロシージャレベル変数

変数は、宣言される場所に応じて、その有効範囲が変わってきます。変数宣言の場所に応じて、変数はモジュールレベル変数とプロシージャレベル変数に大別でき、接頭語によってさらに分別できます。

①モジュールレベル変数
モジュールの先頭で、プロシージャの記述の前に宣言した変数をモジュールレベル変数と言います。
特定のひとつのプロシージャのみで使用する変数ではなく、複数のプロシージャで共通して使用する変数をモジュールレベル変数として宣言します。
モジュールレベル変数で使用される接頭語として、”Public”と”Private”があります。

接頭語 説明
Public 別モジュールに記述されたプロシージャからも参照が可能な変数。
Private 同一モジュールからの参照のみ可能な変数。

※モジュールレベルで”Dim”という接頭語を使用して宣言した変数は、Privateと同様の扱いとなります。

有効範囲が異なっていますが、どちらも基本的に複数のプロシージャが使用する変数として宣言する際に使用されます。呼び出すプロシージャが同一モジュール内同士なのか、異なるモジュールのものなのかによって使い分ける形となります。

②プロシージャレベル変数
プロシージャ内で宣言された変数をプロシージャレベル変数と言います。プロシージャレベル変数は、宣言されたプロシージャ内でのみ有効な変数となります。
プロシージャレベル変数は、基本的に”Dim”という接頭語を使用して宣言を行います。PublicやPrivateを使用するとコンパイルエラーとなります。

なぜスコープが必要なのか

前回も同じような話がありましたが、今回もなぜスコープが必要なのか考えてみましょう。なぜ、すべてPublic変数ではいけないのか、ということです。すべての場所で参照できる変数が存在すればそれで万事OKに思われる方もいらっしゃるでしょう。

――――はい。この変数のスコープに関してもひとつのルールとなります。適切な有効範囲を選択して変数宣言を行うことで、

①予期しない箇所での変数への値の代入等が起こりづらくなる

②プロシージャレベル変数で、異なるプロシージャなら同じ名称を用いることができる

③他人(3日後のコードは他人のコードとも言われるので、未来の自分も含まれます)が変数を見た際に、どの範囲で使用したい変数なのかが明確になる

といったメリットがあります。
ちょっとしたプログラムならそこまで明確に変数のスコープを分けることはしなくても良いのですが、ある程度の規模のマクロを組むとか、多人数でひとつのプロジェクトを作成する場合等は気にした方が良いでしょう。

まとめ

今回は変数のスコープについて学習しました。前回のExcelVBAを1から学ぶ! #5 ~データ型について~と同様、絶対に必要!ってものでもないのですが、理解しておくと融通が利くことも確かです。

今回はここまでとなります。次回は配列について見ていきます。

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

PAGE TOP