Excelのこととか色々

マクロをどんな Excel ファイルにも実行できるように設定して、3秒かかる操作も1秒で完了。あといろいろ書いてみます・・・

【VBAスタンダードに挑戦!】参照渡し、値渡し

【VBAスタンダードに挑戦!】

f:id:tuna-kichi:20200614200940p:plain

 

本日の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 を使用する場面が、私の業務で発生するだろうか?

値だけ渡して何ができるのか想像できません。

 

別に、渡さなくても、受け側で定義すればいいと思うんだけど・・・

 

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

 

  Graspyで無料プログラミング講座を受講する