_基本

【VBA入門】変数の適用範囲(スコープ)Dim/Public

プログラムを勉強し始めると「変数」を知ります。
今までに感じた事のない概念で、最初は戸惑と考えます。

当方ではエクセルVBAがメインですので、変数=セルだと説明します。
初心者はデータを入れる箱(セルも一緒ですよね)と理解していれば問題ありません。

一通りマクロを組めるようになれば、変数を詳しく知り、初級者を脱出しましょう。

変数の適用範囲(スコープ)とは

変数の適用範囲(スコープ)とは、宣言した変数を使用可能な範囲のことです。
変数を宣言した場所、宣言方法によって使用できる範囲が変わります。

変数の種類は他にもありますが(StaticやPrivate等の宣言方法や)、
ここでは代表的な DimPublic のみ説明します。

変数種類変数宣言適用範囲(スコープ)有効期間
プロシージャ
レベル変数
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

まとめ

DimPublic の変数について説明しましたが、それぞれの特徴を理解して使用しましょう。
プロシージャ間の橋渡しがある変数は Publicといった形でプログラムを組むと、
不具合修正するタイミングや、半年後、1年後に見直すのが
大変です。

全てを Public にすると見直す部分が多くなり、適用範囲は出来る限り狭い方が良いです。
不具合をなくす。コードの可読性を上げる。プログラム自体を属人化させない形にしましょう。

関連記事

【VBA基本】変数のデータ型一覧

変数ではなく、定数もうまく利用し業務効率化しましょう。
【VBA基本】Constでの定数宣言と定数一覧

コメント

タイトルとURLをコピーしました