引数の引き渡し

プロシージャの呼び出し時に引数として変数を渡す場合、渡し方には、参照による引き渡しと、値による引き渡しの方法があります。


参照による引き渡し

特に指定しない場合、「参照による引き渡し」で渡されます。参照による引き渡しで変数を渡すと、その変数の内容は、呼び出されたプロシージャ内で、変更することが出来ます。 変数が変更されると、呼び出し側で参照する元の変数の値も変化します。
参照渡しを明示的に指定するには、ByRefキーワードを使用します。


Sub Test1()
	Dim i As Integer
	i = 10
	S = Henko1(i)
	Range("C1").Value = i
End Sub

Function Henko1(ByRef j As Integer)
	Range("A1").Value = j
	j = 100
	Range("B1").Value = j
End Function

結果
結果の図


値による引き渡し

値による引き渡しを明示的に指定するには、ByValキーワードを使用します。
値による引き渡しでは、果たされた変数のコピーが作られて渡されます。そのため、呼び出し側で参照する元の変数の値は変わりません。


Sub Test2()
	Dim i As Integer
	i = 10
	S = Henko1(i)
	Range("C1").Value = i
End Sub

Function Henko1(ByVal j As Integer)
	Range("A1").Value = j
	j = 100
	Range("B1").Value = j
End Function

結果
結果の図


名前付き引数の引き渡し

名前付き引数を使って、値を引き渡すこともできます。名前付き引数を使う場合、構文で決まっている記述順序に関係なく、任意の順序で指定できます。名前付き引数に値を代入するためは、引数名、コロンと等号 (:=)、値の順で記述します。
例えば、MsgBox関数の構文は以下なので、

MsgBox(prompt[, buttons] [, title] [, helpfile, context])
メッセージボックス関数でしめした「サンプル1」は下記のように記述できます。(なお、戻り値を使用するため、引数を括弧で囲み、戻り値は変数Modoritiに代入しています)


Sub msgboxSample1A()
	Dim Modoriti
	Dim MyMessage As String

	Modoriti = msgbox(prompt:="「はい」か「いいえ」を押してください", _
					Buttons:=vbYesNo)
	Select Case Modoriti
		Case vbYes
			MyMessage = "「はい」がクリックされました。"
		Case vbNo
			MyMessage = "「いいえ」がクリックされました。"
	End Select
	Range("A1").Value = MyMessage
End Sub

Excel VBAのチップス一覧へ戻る

ツイート
このエントリーをはてなブックマークに追加
inserted by FC2 system