こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

参照渡しをする時は、渡される側は違う変数を使う?

参照渡しをする時は、渡される側は違う変数を使うべきなのでしょうか?

VBAのお勉強をしているのですが

Sub test1()
Dim mystr As String
mystr = "a"
Call test2(mystr)
Call test3(mystr)
End Sub
Sub test2(ByRef mystr As String)
MsgBox mystr
End Sub
Sub test3(ByRef mystr2 As String)
MsgBox mystr2
End Sub

この場合、test2とtest3ではどちらを使ったほうがいいのでしょうか?
test3は、mystr2 というmystrとは違う変数を使っていますが、
test2は、test1のmystrと同じ変数を使っています。

test1と同じ変数を使おうが違う変数を使おうが
どちらにしろ
(ByRef 変数名 As String)
で宣言するから、変わらないのでしょうか?

投稿日時 - 2013-03-25 21:45:41

QNo.8011591

困ってます

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

>test1と同じ変数を使おうが違う変数を使おうが
>どちらにしろ
>(ByRef 変数名 As String)
>で宣言するから、変わらないのでしょうか?

実際に、コーディングをする時に、読みやすいコードに書くのは当たり前のことです。

例え、同じものであっても、サブルーチンなどの場合に、引数で違った名前でつけたら読みにくくなるはずです。ただし、Public キーワードをつけて、他でも使えるものとしプロシージャの引数の名称を一般名(データ型などを類推できるようにする)にするなら、また話は別です。今回は、呼び出しだけに使うものですから、常識的には、引数は変数名と同じにします。

理屈でなく、mystr は、同じものなのですから、私なら表記を同じにします。
Call test2(mystr) →Sub test2(ByRef mystr As String)

投稿日時 - 2013-03-25 22:27:39

お礼

読みやすさを心がけるのが一番ですね。
私自身test3のやり方は混乱するので参照渡しをする際は同じ変数を使いたいなーと思い質問しました。

投稿日時 - 2013-03-26 20:50:18

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>test1と同じ変数を使おうが違う変数を使おうが
>どちらにしろ
>(ByRef 変数名 As String)
>で宣言するから、変わらないのでしょうか?
貴方が言われているように、これが正しいですね。




余談
C言語のポインタを理解していれば、このあたりの仕組みは簡単に理解できますね

投稿日時 - 2013-03-25 22:14:42

お礼

やはりそういう事なんですね。
C言語ですか・・・
未知の世界です。

投稿日時 - 2013-03-26 20:50:04

あなたにオススメの質問