【VBAスタンダードに挑戦!】
本日の5分勉強の内容
********************************************************
参照渡し
・引数を渡すときに変数で渡すことができる
・引数を受け取ったプロシージャーは、その変数でコードを実行し、
その結果を返す
値渡し
・受け側のプロシージャーで、ByVal と定義すると、変数ではなく、
その中身の値のみ受け取る(ややこしい)
・受け側のプロシージャーで受け取った値でコードを実行しても、
受け取った値をそのまま返す。(変数に変化なし)
********************************************************
前回使用したサンプルコードで「値渡し」 を考えると・・・
Sub F_Procedure()
Dim Ans As Long
Range("A1") = 10
Range("B1") = 2
Call Calculate(Ans)
'①Ans を Function Calculate に渡すー>Ans は、まだ空っぽだから 0 を渡す
MsgBox Ans
'④Function Calculate の計算結果 20 の Ans は戻らず、0 のまま
End Sub
Function Calculate(ByVal Ans As Long)
'②「ByVal」と定義すると、変数ではなく、値を受け取る
Ans = Range("A1") * Range("B1")
'③Ans には、ここでの計算結果 10 x 2 の 20 が 入る
End Function
Calculate・・・計算する
ByVal・・・Value = 値
受け側で、ByVal と指定しなければ、デフォルトで、
ByRef が適用されます。(参照渡し)
その場合は、計算結果の 20 が Sub プロシージャーに戻されます。
ByRef・・・Refer (Reference?) 参照、引用
********************************************************
ちょっと簡単には理解できないところでした。
ByVal を使用する場面が、私の業務で発生するだろうか?
値だけ渡して何ができるのか想像できません。
別に、渡さなくても、受け側で定義すればいいと思うんだけど・・・
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/