• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:参照渡し(ByRef))

参照渡し(ByRef)とは?

このQ&Aのポイント
  • 参照渡し(ByRef)は、変数を引数として渡す際に、その変数のメモリ上の場所を参照する方法です。
  • サンプルコードでは、Sample1プロシージャでbufという変数に「aaa」を代入し、Sample2プロシージャを呼び出しています。
  • Sample2プロシージャでは、引数にByRefを指定することで、変数aはbufと同じメモリ上の場所を参照します。そのため、aに代入した「ccc」はbufにも反映されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

まず、提示されているコードですが、   Call Sample2("bbb") は、   Call Sample2(buf) の記述ミスかと思います(汗) (そうでないと、「参照渡し」についての話にならない・・・はず) ※PVTETEJPB8さんが、ではなく、そのサンプルを提示したテキスト   (サイト?)の著者が、ということです。   (でないと、「"aaa"」の次に「"ccc"」が出てくるとも思えない、と) その上で・・・VBAの場合、特に指定しない場合は「ByRef」が省略されて いるものとみなされるので、どちらも「参照渡し」をしていることになり、 動作に違いは発生しません。 ですので、 > ByRefは役に立ってるのですか? については、「参照渡しの明示」という意味においてのみ、役に立っている、 ということになるかと思います。 なお、Sample2の引数「a」に対して、「参照渡し」の対となる「値渡し」を 指定すると、Sample1の動作は変化しますので、確認してみて下さい。 Sub Sample2(ByVal a As String)  '「ByVal」により値渡しを指定   a = "ccc" End Sub ・・・さて、なぜ「"bbb"」が出てきたかを想像(妄想)してみたのですが・・・ ひょっとして、その説明をされていたものでは、「Optional」についても触れて いなかったでしょうか? Sub Sample2(Optional a As String = "bbb")   a = "ccc" End Sub ・・・とはいえ、今回のSample2の引数「a」をOptionalにして、既定値を 「"bbb"」にしたとしても、変数「buf」には何の影響もないので、やはり 誤記の可能性が高いように思います(汗) ByRefとByValについての参考: http://homepage1.nifty.com/CavalierLab/lab/vb/byvalbyref.html ・・・私自身は、ByRefは省略しまくってますが(汗)

PVTETEJPB8
質問者

お礼

ご回答ありがとうございます。