教えて!ExcelVBA!

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

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

f:id:m_kbou:20200418100751p:plain

ExcelVBAでプログラミングをしていく上では、変数の使用は必須となります。使い方を理解してから次のステップに進んでもらえると、他のプログラム記述内容もすんなり頭に入ってくると思います。その変数の使い方について紹介します。

 

 

変数の定義方法

記述方法は以下の様になります

Dim [変数名] As [型]

Public [変数名] As [型]

[説明]:

変数とは『値を一時的に保存しておくための入れ物であり、条件により値を変更する事が可能なもの』となります。変数は使用前に定義が必要となり、定義の方法には幾つかのパターンがあります。今回は「Dim」と「Public」の2つの定義パターンを紹介します。

定義 内容
Dim プロシージャの中でのみ使用できる定義となります。
Public 複数のプロシージャで共通使用できる定義となります。

また、定義の中では以下内容の記述も必要になります。

[変数名] 任意の変数名を記述します。
[型] 変数の型を記述します。
※具体的には以下一覧のいずれかを指定します。
型内容 詳細内容
String 文字列型 文字列
Boolean ブール型 「True」又は「False」
Byte バイト型 0から255の正の整数
Integer 整数型 -32,768から32,767の整数
Long 長整数型 -2,147,483,648から2,147,483,647の整数
Single 単精度浮動小数点型 負の値:約-3.4×10(38乗)~-1.4×10(-45乗)
正の値:約1.4×10(-45乗)~1.8×10(38乗)
Double 倍精度浮動小数点型 負の値:約-1.8×10(308乗)~-4.0×10(-324乗)
正の値:約4.9×10(-324乗)~1.8×10(308乗)
Currency 通貨型 -922,337,203,685,477.5808から
922,337,203,685,477.5807の固定小数点数
Date 日付型 西暦100年1月1日から
西暦9999年12月31日 (日付と時刻)
Object オブジェクト型 オブジェクト参照するデータ型
String バリアント型 あらゆる種類の値を保存できる型

[記述例]:

Dim 行 As Double
Public 行 As Double

使い方

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

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

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

[プログラミング例]:

Sub サンプル()

  '↓処理①
  Dim 行 As Double

  '↓処理②
  行 = 0
  MsgBox 行

  '↓処理③
  行 = 行 + 1
  MsgBox 行

  '↓処理④
  行 = 行 + 1
  MsgBox 行

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:20210512183751p: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

'*---------------*
'* サンプル
'*---------------*
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」が引き続き使用される事となります。よって、ここでは「処理②でセットされた変数:行から20を引き算し、変数:行に再セットして下さい。」との内容になります。「=」(イコール)の右側で100-20=80の計算を行い、結果の80を左側の変数:行に再セットします。セット後のMsgBoxでは、変数:行にセットされている値の「80」が表示されます。

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

f:id:m_kbou:20210512183810p: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側で警告を出してくれます。これにより、エラーの起きにくい精度の高いプログラムを組む事ができるようになります。