まさ工房

ExcelVBAとAcessDBを利用した業務支援ツールを作成する工房です

【Excelマクロ・VBA】変数って何ですか?定義や宣言の方法について教えて!

       f:id:m_kbou:20190518131044p:plain

変数とは「値を一時的に保存していくための入れ物となり、条件により値を変更する事が可能」と理解してもらえればいいと思います。ExcelVBAでプログラミングをしていく上では、変数の使用は必須となります。使い方を理解してから次のステップに進んでもらえると、他のプログラム記述内容もすんなり頭に入ってくると思います

 

【目次】

 

構文

定義は以下の様になります。

=============================================================================

Dim [変数名] As [型]

Public [変数名] As [型]

=============================================================================

[説明]:

[変数名]には変数の名前を記述します。名前はローマ字以外にも漢字や記号を使用する事ができます。[型]には変数の型を指定します。型にはいくつかありますが、代表的なものを以下に一覧にしておきます。ちなみに型は省略する事も可能ですが、省略した場合はVariant型が自動的に割り当てられます。また、DimとPublicとの違いについて予め説明しておくと、Dimはプロシージャ内でのみ有効になる変数定義となり、プロシージャ処理が終了すると変数の値もクリアされます。それに対し、Publicは複数のプロシージャで共通の変数として使用する場合に指定し、対象のExcelファイルが閉じるまでセットされた値はクリアされません。詳細につていは、以下の使い方で説明します。

f:id:m_kbou:20190514131017p:plain

 

使い方

変数の使い方について、具体的に説明していきます。

Dimによる変数定義(プロシージャ内でのみ使用できる変数を定義)

まず最初にDimによる変数の定義方法について説明します。

[記述例]:

-----------------------------------------
Sub サンプル()
    '↓処理①
    Dim 行 As Double
    '↓処理②
    行 = 0
    MsgBox 行
    '↓処理③
    行 = 行 + 1
    MsgBox 行
    '↓処理④
    行 = 行 + 1
    MsgBox 行 
End Sub
-----------------------------------------

※処理の流れは以下の通りとなります。
[処理①]:変数の定義をします
Dimによる変数の定義となります。変数名は「行」となり、入力できる値は「小数を含む数値のみ」となります。ちなみに、この変数:行に数値以外のデータを入力しようとするとエラーとなり、警告メッセージが表示されます。また、Dimで指定した変数は、プロシージャ内でのみセットされた値が有効となります。(プロシージャを抜けるとセットされた値はクリアされます)
[処理②]:変数に初期値をセットします
処理①で指定した変数:行に初期値として0をセットします。セット後のMsgBoxでは、変数:行にセットされている値の「0」が表示されます。
[処理③]:処理②で初期値セットした変数に1を足し算します
ここでは、「処理②でセットされた変数:行の値(0)に1を足し算し、変数:行にセットしなおして下さい。」との内容になります。もう少し詳しく説明すると、「=」(イコール)の右側に書かれている「行+1」の結果を、左側の「行」にセットし直すとの内容になります。右側で0+1=1の計算を行い、結果の1を左側の変数:行にセットし直します。セット後のMsgBoxでは、変数:行にセットされている値の「1」が表示されます。
[処理④]:処理③の足し算した結果に更に1を足し算します
ここでは、「処理③でセットされた変数:行の値(1)に1を足し算し、変数:行にセットしなおして下さい。」との内容となります。上記の処理③と同じで、「=」(イコール)の右側に書かれている「行+1」の結果を、左側の「行」にセットし直すとの内容になります。右側で1+1=2の計算を行い、結果の2を左側の変数:行にセットし直します。セット後のMsgBoxでは、変数:行にセットされている値の「2」が表示されます。

[実行例]:

[処理②]のMsgBoxでは、「0」が表示されます。

 f:id:m_kbou:20190518131111p:plain

[処理③]のMsgBoxでは、「1」が表示されます。

f:id:m_kbou:20190518131126p:plain

[処理④]のMsgBoxでは、「2」が表示されます。

f:id:m_kbou:20190518131143p:plain 

Dim定義の使い方についての説明は以上です。 

 

Publicによる変数定義(複数のプロシージャで共通的に使用できる変数を定義)

次にPublicによる変数の定義方法について説明します。

[記述例]:

-----------------------------------------

'↓処理①
Public 行 As Double

'*--------------------*
'* サンプル
'*--------------------*
Sub サンプル()
    '↓処理②
    行 = 100
    MsgBox 行
    '↓処理③
    Call サンプル1
    '↓処理④
    Call サンプル2
End Sub
   
'*--------------------*
'* サンプル1
'*--------------------*
Sub サンプル1()
    '↓処理⑤
    行 = 行 - 20
    MsgBox 行
End Sub

'*--------------------*
'* サンプル2
'*--------------------*
Sub サンプル2()
    '↓処理⑥
    行 = 行 - 50
    MsgBox 行
End Sub
-----------------------------------------

※処理の流れは以下の通りとなります。
[処理①]:変数の定義をします
Publicによる変数の定義となります。変数名は「行」となり、入力できる値は「小数を含む数値のみ」となります。Publicで指定した変数は、複数のプロシージャで共通で使用する事ができます。(ファイルが閉じられるまでセットされた値は有効的に使用する事ができます)
[処理②]:変数に初期値をセットします
処理①で指定した変数:行に初期値として100をセットします。セット後のMsgBoxでは、変数:行にセットされている値の「100」が表示されます。
[処理③]:サンプル1プロシージャを呼び出します
ここでは、「サンプル1プロシージャを呼び出して、その中の処理を実行して下さい。また、処理完了後には再度戻って来て下さい。」との意味になります。特定のプロシージャから他のプロシージャを呼び出す場合は、呼び出すプロシージャ名の前にCall文を記述します。よって、この後はサンプル1プロシージャの処理が実施される事となり、[処理⑤]の内容が実行されます。
[処理④]:サンプル2プロシージャを呼び出します
ここでは、「サンプル2プロシージャを呼び出して、その中の処理を実行して下さい。また、処理完了後には再度戻って来て下さい。」との意味になります。よって、この後はサンプル2プロシージャの処理が実施される事となり、[処理⑥]の内容が実行されます。
[処理⑤]:処理②で初期値セットした変数から20を引き算します
[処理①]で説明した通り、変数をPublic指定しているため、変数:行は[処理②]で初期値セットした「100」が引き続き使用される事となります。よって、ここでは「処理②でセットされた変数:行の値(100)から20を引き算し、変数:行に再セットして下さい。」との内容になります。「=」(イコール)の右側で100-20=80の計算を行い、結果の80を左側の変数:行に再セットします。セット後のMsgBoxでは、変数:行にセットされている値の「80」が表示されます。
[処理⑥]:処理⑤の足し算した結果に更に50を引き算します
変数:行は[処理⑤]でセットした「80」が引き続き使用される事となります。よって、ここでは「処理⑤でセットされた変数:行の値(80)から50を引き算し、変数:行に再セットして下さい。」との内容となります。「=」(イコール)の右側で80-50=30の計算を行い、結果の30を左側の変数:行に再セットします。セット後のMsgBoxでは、変数:行にセットされている値の「30」が表示されます。

[実行例]:

[処理②]のMsgBox表示では、「100」が表示されます。

f:id:m_kbou:20190518131448p:plain

[処理⑤]のMsgBox表示では、「80」が表示されます。

f:id:m_kbou:20190518131503p:plain

[処理⑥]のMsgBox表示では、「30」が表示されます。

f:id:m_kbou:20190518131518p:plain

Public定義の使い方についての説明は以上です。 

 

おわりに

変数の型定義は設定するようにして下さい。定義を指定する事で、プログラミングのバグ(誤り)を発見しやすくなります。文字列の変数に数値を入力しようとしたり、日付の変数に文字列を入力しようとした場合、Excel側で警告を出してくれます。これにより、エラーの起きにくい精度の高いプログラムを組む事ができるようになります。