変数

■概要

VBAにも変数はあります。
他の言語同様にデータ型変数名を宣言をすることで使用可能となり、
宣言したデータ型の数値を格納して計算などに使用します。

■宣言方法

●書式
	・書式例
		Dim 変数名 As 変数の型
	
	・具体例
		Dim val As Integer
		val = 10
		Cells(1, 1).Value = val

		実行結果:
			シートの行1、列1に10が入る

■型の種類

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

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

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

■宣言時の初期化方法

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

●書式
	書式例:
		Dim 変数名 As データ型 : 変数名 = 値
	
	具体例:
		Dim val As Integer : 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;

■プロシージャの引数

プロシージャに引数を設定することが可能です。
引数には「値渡し」と「参照渡し」があり、どちらを使用するかで書式が異なります。

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

	・仮引数の変数の書式
		ByVal 変数名 As 型名

	・具体例
		Sub Test()
			Cells(1, 1).Value = AddSum(2, 3)
			MsgBox Cells(1, 1).Value
		End Sub

		Function AddSum(ByVal a As Long, ByVal b As Long)  As Long
			AddSum = a + b
		End Function
	
●参照渡し
	参照渡しは実引数自体(アドレス)を仮引数に渡します。
	仮引数として渡された変数は実引数本体ですので、
	関数の処理の中で引数の値を変更した場合、実引数の値が変わります。

	・仮引数の変数の書式
		ByRef 変数名 As 型名

	・具体例
		Sub Test()
			Dim val As Integer
			Call AddSum(val, 2, 3)
			Cells(1, 1).Value = val
			MsgBox Cells(1, 1).Value
		End Sub

		Sub AddSum(ByRef ret As Integer, ByVal a As Long, ByVal b As Long)
			ret = a + b
		End Sub

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

■変数の寿命

プロシージャ内で宣言された変数はプロシージャが終了するまでが寿命となります。

●例
	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

	上記の例の出力結果の通り、VBAの変数は宣言を行ったら
	プロシージャが終了するまで存在します。
	CやC++等のように「{}」によるスコープ設定がないので注意して下さい。