プログラムを勉強し始めると「変数」を知ります。
今までに感じた事のない概念で、最初は戸惑と考えます。
当方ではエクセルVBAがメインですので、変数=セルだと説明します。
初心者はデータを入れる箱(セルも一緒ですよね)と理解していれば問題ありません。
一通りマクロを組めるようになれば、変数を詳しく知り、初級者を脱出しましょう。
変数の適用範囲(スコープ)とは
変数の適用範囲(スコープ)とは、宣言した変数を使用可能な範囲のことです。
変数を宣言した場所、宣言方法によって使用できる範囲が変わります。
変数の種類は他にもありますが(StaticやPrivate等の宣言方法や)、
ここでは代表的な Dim と Public のみ説明します。
変数種類 | 変数宣言 | 適用範囲(スコープ) | 有効期間 |
プロシージャ レベル変数 | Dim | 変数を宣言したプロシージャのみ | プロシージャ実行中 |
プライベートモジュール レベル変数 | Dim | 変数を宣言したモジュールの 全てのプロシージャ | 実行完了するまで |
パブリックモジュール レベル変数(グローバル変数) | Public | 全てのプロシージャ | 実行完了するまで |
プロシージャレベル変数
プロシージャ内でのみ使用可能。
プロシージャ内に Dim i as Long のように宣言する。
Option Explicit '■Modure1内に存在するプロシージャ(Procedure1、Procedure2) Public Sub Procedure1() Dim i As Long i = 1 MsgBox i '1を表示 MsgBox k 'kはProcedure1で宣言していない為使用不可 End Sub Public Sub Procedure2() Dim k As Long k = 1 MsgBox i 'kはProcedure1で宣言していない為使用不可 MsgBox k '2を表示 End Sub
プライベートモジュールレベル変数
同じモジュール(Module1)内の全てのプロシージャで使用可能。
モジュールの先頭に Dim i As Long のように宣言する。
Option Explicit Dim i As Long '■Modure1内に存在するプロシージャ(Procedure1、Procedure2) Public Sub Procedure1() i = 1 MsgBox i '1を表示 MsgBox k 'kはProcedure1で宣言していない為使用不可 End Sub Public Sub Procedure2() Dim k As Long k = 1 MsgBox i '0を表示(宣言している為使用できるが、初期値の0を表示) MsgBox k '2を表示 End Sub
パブリックモジュールレベル変数
全てのモジュール(Module1、Module2)内の全てのプロシージャで使用可能。
モジュールの先頭に Public i As Long のように宣言する。
他の言語では「グローバル変数」と呼ばれています。
Option Explicit Public i As Long '■Modure1内に存在するプロシージャ(Procedure1) '■Modure2内に存在するプロシージャ(Procedure2) Public Sub Procedure1() i = 1 MsgBox i '1を表示 MsgBox k 'kはProcedure1で宣言していない為使用不可 End Sub Public Sub Procedure2() Dim k As Long k = 1 MsgBox i '0を表示(宣言している為使用できるが、初期値の0を表示) MsgBox k '2を表示 End Sub
まとめ
Dim や Public の変数について説明しましたが、それぞれの特徴を理解して使用しましょう。
プロシージャ間の橋渡しがある変数は Publicといった形でプログラムを組むと、
不具合修正するタイミングや、半年後、1年後に見直すのが大変です。
全てを Public にすると見直す部分が多くなり、適用範囲は出来る限り狭い方が良いです。
不具合をなくす。コードの可読性を上げる。プログラム自体を属人化させない形にしましょう。
関連記事
変数ではなく、定数もうまく利用し業務効率化しましょう。
【VBA基本】Constでの定数宣言と定数一覧
コメント