VBScript: Functionの引数(参照渡しと値渡しを区別する)

VBScriptでFunctionプロシージャに引数を渡す場合、 「参照渡し(ByRef)」と「値渡し(ByVal)」の2通りがあります。

参照渡し」ではFunctionプロシージャ側で引数の値を書き換えた場合、 呼び出し元の変数の値も変更されます。
値渡し」ではFunctionプロシージャ側で引数の値を書き換えても、 呼び出し元の変数の値は変更されません。

「参照渡し(ByRef)」と「値渡し(ByVal)」の指定方法は次の通りです。

Function 関数名(ByVal 引数1, ByRef 引数2)
	' 処理
End Function

「ByVal」や「ByRef」を省略した場合は「参照渡し(ByRef)」となります。

ByRefとByValによる動作の違い

次のサンプルコードでは、 ByRefとByValによる動作の違いを検証しています。

関数「Test」の第1引数は「参照渡し(ByRef)」、 第2引数は「値渡し(ByVal)」で指定し、 Functionプロシージャ内で値を変更しています。

' 関数定義
Function Test(ByRef x, ByVal y)
	
	x = 1
	y = 1
	
	Test = x + y

End Function

a = 4
b = 5

'関数呼び出し
c = Test(a, b)

WScript.Echo a  ' 1

WScript.Echo b  ' 5

WScript.Echo c  ' 2

変数「a」は「参照渡し(ByRef)」なので値が書き換えられていて「1」になっています。 変数「b」は「値渡し(ByVal)」なので値は書き換えられていません。

VBScript入門