Excel VBAのチップスです。
プロシージャの呼び出し時に引数として変数を渡す場合、渡し方には、参照による引き渡しと、値による引き渡しの方法があります。
特に指定しない場合、「参照による引き渡し」で渡されます。参照による引き渡しで変数を渡すと、その変数の内容は、呼び出されたプロシージャ内で、変更することが出来ます。
変数が変更されると、呼び出し側で参照する元の変数の値も変化します。
参照渡しを明示的に指定するには、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