変数

概要

変数とは値を保存するためのメモリ領域です。
※参考書などではよく変数を箱や場所で表現しています。

宣言方法

変数を使用するには、変数の宣言をする必要があります。
宣言を行うことで情報を保存するための場所がメモリ上で確保されます。
宣言はデータ型変数名を宣言をすることで使用可能となります。
使用可能になった変数は値を格納したり、格納した値を計算などに利用したりします。

宣言書式
書式 具体例
Dim 変数名 As 変数の型 Dim val As Integer

使用例

以下の例はInteger型の変数valを宣言しています。
Integerがデータ型でvalが変数名です。
Dim val As Integer
val = 10
Cells(1, 1).Value = val

型の種類

VBAの型の種類が数多いので一部を紹介します。
vba_0010

この他にも小数点を扱えるSingleやDoubleなどもありますので
ぜひ調べてみてください。

※CやC++を学んでいる人はIntegerがintと同じ4バイトの範囲と思いがちですが、
 Integerはshortと同じ範囲でint型と同じ範囲はLongですので注意して下さい。

宣言時の初期化方法

VBAの変数宣言時の初期化は宣言時の書式から他の言語のように
「int x = 0;」とは書けませんが、宣言の後ろに「:」を付けることで
初期化処理を行うことができます。

宣言時初期化の書式
書式 具体例
Dim 変数名 As データ型 : 変数名 = 値 Dim val As Long : val = 10

「:」記号

VBAでは「:」記号は区切りを表しています。
「Dim val As Integer: val = 10」は「Dim val As Integer」と
「val = 10」の2つの命令文が一文に書かれていることになります。
CやC++の区切り記号は「;」ですので、以下の書式は同じ意味です。

書式の比較
言語 コード
VBA Dim val As Integer: val = 10
C/C++ int val; val = 10;

プロシージャの引数

プロシージャには引数と呼ばれる実行側からプロシージャに
情報(値)を与えることができる機能があります。
引数を上手く使えば汎用的で便利なプロシージャを作成することができます。
この引数には渡す側が「実引数」受け取る側が「仮引数」と呼ばれており、
引数の種類も「値渡し」と「参照渡し」があります。

実引数と仮引数

引数はプロシージャを実行する側が値(変数)をプロシージャに渡し、
その値(変数)がプロシージャの引数用の変数に保存されます。
この時の実行側がプロシージャに渡す値を「実引数」と呼び、
プロシージャ側で渡された値を保存した変数を「仮引数」と呼びます。

具体例

Sub Test()
	' AddSumの()の中の2と3が実引数
	Cells(1, 1).Value = AddSum(2, 3)
	MsgBox Cells(1, 1).Value
End Sub

' 引数のaとbは実行側からの値を保存する仮引数
Function AddSum(ByVal a As Long, ByVal b As Long)  As Long
	AddSum = a + b
End Function

値渡し

値渡しは実引数の値をコピーして仮引数に渡します。
仮引数はコピーなので仮引数の値を変更したとしても実引数には影響がありません
値渡し
書式
ByVal 変数名 As 型名

具体例

Sub Test()
	Cells(1, 1).Value = AddSum(2, 3)
	MsgBox Cells(1, 1).Value
End Sub

' 引数aとbは値渡しの引数
Function AddSum(ByVal a As Long, ByVal b As Long)  As Long
	AddSum = a + b
End Function

参照渡し

参照渡しは実引数自体(アドレス)を仮引数に渡します。
仮引数として渡された変数は実引数本体ですので、
関数の処理の中で引数の値を変更した場合、実引数の値が変わります
参照し
書式
ByRef 変数名 As 型名

具体例

Sub Test()
	Dim val As Long
	Call AddSum(val, 2, 3)
	Cells(1, 1).Value = val
	MsgBox Cells(1, 1).Value
End Sub

' 引数retは参照渡し、aとbは値渡し
Sub AddSum(ByRef ret As Long, ByVal a As Long, ByVal b As Long)
	ret = a + b
End Sub

実行結果
メッセージボックスに5と表示される

変数の寿命

プロシージャ内で宣言された変数はプロシージャが終了するまでが寿命となります。
以下の例の出力結果のように、VBAの変数は宣言を行ったら
プロシージャが終了するまで存在します。

具体例

Sub Test()
	Dim val As Integer

	val = 0
	If val = 0 Then
		Dim test_val As Integer

		test_val = 10
	End If

	MsgBox test_val
End Sub

出力結果
メッセージボックスに10と表示される