教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 基本操作】変数って何ですか?定義や宣言の方法について教えて!

     f:id:m_kbou:20200418100751p:plain

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

 

【目次】

 

変数の定義方法

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

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

Dim [変数名] As [型]

Public [変数名] As [型]

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

[説明]:

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

f:id:m_kbou:20200210120222p:plain

 

使い方

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

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

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

[プログラミング例]:

-----------------------------------------
Sub サンプル()

    '↓処理①
    Dim As Double ’←Dimによる変数の定義です。

    '↓処理②
    = 0   ’←変数:行には「0」をセットします。
    MsgBox 行 ’←このメッセージボックスでは「0」が表示されます。

    '↓処理③
    = + 1 ’←変数:行には0+1=1の「1」がセットされます。
    MsgBox  ’←このメッセージボックスでは「1」が表示されます。

    '↓処理④
    = + 1 ’←変数:行には1+1=2の「2」がセットされます。
    MsgBox   ’←このメッセージボックスでは「2」が表示されます。

End Sub
-----------------------------------------

処理の流れは以下の通りとなります。

[処理①]:変数の定義をします
Dimによる変数の定義となります。変数名は「行」となり、型についてはDoubleとなります。上記の型一覧からもわかる通り、Doubleで入力できる値は「小数を含む数値のみ」となります。ちなみに、この変数:行に数値以外のデータを入力しようとするとエラーとなり、警告メッセージが表示されます。また、Dimで指定した変数は、プロシージャ内でのみセットされた値が有効となります。(プロシージャを抜けるとセットされた値はクリアされます)

[処理②]:変数に初期値をセットします
処理①で指定した変数:行に初期値として0をセットします。セット後のMsgBoxでは、変数:行にセットされている値の「0」が表示されます。

[処理③]:処理②で初期値セットした変数に1を足し算します
「処理②でセットされた変数:行に1を足し算し、変数:行にセットしなおして下さい。」との内容になります。もう少し詳しく説明すると、「=」(イコール)の右側に書かれている「行+1」の結果を、左側の「行」にセットし直すとの内容になります。右側で0+1=1の計算を行い、結果の1を左側の変数:行にセットし直します。セット後のMsgBoxでは、変数:行にセットされている値の「1」が表示されます。

[処理④]:処理③の足し算した結果に更に1を足し算します
「処理③でセットされた変数:行に1を足し算し、変数:行にセットしなおして下さい。」との内容となります。上記の処理③と同じで、「=」(イコール)の右側に書かれている「行+1」の結果を、左側の「行」にセットし直すとの内容になります。右側で1+1=2の計算を行い、結果の2を左側の変数:行にセットし直します。セット後のMsgBoxでは、変数:行にセットされている値の「2」が表示されます。

f:id:m_kbou:20210208105357p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(ボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210225071705p:plain

②[処理②]の結果は以下の様に表示されます。MsgBoxで「0」が表示されます。

 f:id:m_kbou:20190518131111p:plain

③[処理③]の結果は以下の様に表示されます。MsgBoxで「1」が表示されます。

f:id:m_kbou:20190518131126p:plain

処理④の結果は以下の様に表示されます。MsgBoxで「2」が表示されます。

f:id:m_kbou:20190518131143p:plain 

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

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

 

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

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

[プログラミング例]:

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

'↓処理①
Public As Double ’←Publicによる変数の定義です。

'*--------------------*
'* サンプル
'*--------------------*
Sub サンプル()
    '↓処理②
    = 100  ’←変数:行には「100」をセットします。
    MsgBox 行 ’←このメッセージボックスでは「100」が表示されます。
    '↓処理③
    Call サンプル1  ’←サンプル1プロシージャにジャンプします。
    '↓処理④
    Call サンプル2  ’←サンプル2プロシージャにジャンプします。
End Sub

'*--------------------*
'* サンプル1
'*--------------------*
Sub サンプル1()
    '↓処理⑤
    = - 20  ’←変数:行には100-20=80の「80」がセットされます。
    MsgBox 行 ’←このメッセージボックスでは「80」が表示されます。
End Sub   

'*--------------------*
'* サンプル2
'*--------------------*
Sub サンプル2()
    '↓処理⑥
    = - 50  ’←変数:行には80-50=30の「30」がセットされます。
    MsgBox  ’←このメッセージボックスでは「30」が表示されます。
End Sub
-----------------------------------------

処理の流れは以下の通りとなります。

[処理①]:変数の定義をします
Publicによる変数の定義となります。変数名は「行」となり、入力できる値は「小数を含む数値のみ」となります。Publicで指定した変数は、複数のプロシージャで共通で使用する事ができます。(ファイルが閉じられるまでセットされた値は有効的に使用する事ができます)

[処理②]:変数に初期値をセットします
処理①で指定した変数:行に初期値として100をセットします。セット後のMsgBoxでは、変数:行にセットされている値の「100」が表示されます。

[処理③]:サンプル1プロシージャを呼び出します
「サンプル1プロシージャを呼び出して、その中の処理を実行して下さい。また、処理完了後には再度戻って来て下さい。」との意味になります。特定のプロシージャから他のプロシージャを呼び出す場合は、呼び出すプロシージャ名の前にCall文を記述します。よって、この後はサンプル1プロシージャの処理が実施される事となり、[処理⑤]の内容が実行されます。

[処理④]:サンプル2プロシージャを呼び出します
「サンプル2プロシージャを呼び出して、その中の処理を実行して下さい。また、処理完了後には再度戻って来て下さい。」との意味になります。よって、この後はサンプル2プロシージャの処理が実施される事となり、[処理⑥]の内容が実行されます。

[処理⑤]:処理②で初期値セットした変数から20を引き算します
[処理①]で説明した通り、変数をPublic指定しているため、変数:行は[処理②]で初期値セットした「100」が引き続き使用される事となります。よって、ここでは「処理②でセットされた変数:行から20を引き算し、変数:行に再セットして下さい。」との内容になります。「=」(イコール)の右側で100-20=80の計算を行い、結果の80を左側の変数:行に再セットします。セット後のMsgBoxでは、変数:行にセットされている値の「80」が表示されます。

[処理⑥]:処理⑤の足し算した結果に更に50を引き算します
変数:行は[処理⑤]でセットした「80」が引き続き使用される事となります。よって、ここでは「処理⑤でセットされた変数:行から50を引き算し、変数:行に再セットして下さい。」との内容となります。「=」(イコール)の右側で80-50=30の計算を行い、結果の30を左側の変数:行に再セットします。セット後のMsgBoxでは、変数:行にセットされている値の「30」が表示されます。

f:id:m_kbou:20210208105854p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(ボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210225072423p:plain

②[処理②]の結果は以下の様に表示されます。MsgBoxで「100」が表示されます。

f:id:m_kbou:20190518131448p:plain

③[処理⑤]の結果は以下の様に表示されます。MsgBoxで「80」が表示されます。

f:id:m_kbou:20190518131503p:plain

処理⑥]の結果は以下の様に表示されます。MsgBoxで「30」が表示されます。

f:id:m_kbou:20190518131518p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

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

 

おわりに

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