|
▼ON さん:
こんにちは
この辺りは非常に大事ですから落ち着いてゆっくり考えてください。
先ずテストで使っているByVal_str2とByRef_str2は検証用としては
全く不適当です。
なぜなら、関数内では引数以外modoriが出てこない
下記の2つの関数と等価です。
Function ByVal_str2(ByVal idx1 As String, ByVal idx2 As String) As String
ByVal_str2 = idx1 & idx2
End Function
Function ByRef_str2(ByVal idx1 As String, ByVal idx2 As String) As String
ByRef_str2 = idx1 & idx2
End Function
次にsut testですが、長くなるので必要部分のみ引用しますが、上に記したように
関数によって、outは変更されません。従って、以下のようになります。
str1 = "hoge"
str2 = " fuga"
out = "123" '代入A
' 変数outは渡しているが、Functionで処理されていない。
'従って、変数outの内容はByVal_strの戻り値には全く関係ない。
Debug.Print "Test1:" & ByVal_str(str1, str2, out)
Debug.Print out '追記※1 ←は代入Aで代入したデータが全く変化していない
'上記と同じ
Debug.Print "Test2:" & ByRef_str(str1, str2, out)
Debug.Print out '追記※2 ←は代入Aで代入したデータが全く変化していない
'結果としてはByVal_st、ByRef_strは同じ処理をしている。
'ByVal、ByRefは関係ない。
で、冷静に考えればこの程度はそんなにややこしくないので、
Helpの
Visual Basicプログラミングのヒント
--引数の効率的な引き渡し
に引数について説明しています。サンプルもあります。
この辺りを冷静に読んでみてはいかがですか?
それと、「VB 値渡し 参照渡し」でググって見たんですが、沢山解説も
ヒットします。それらもご覧になって下さい。
ht tp://www001.upp.so-net.ne.jp/yoshihiro/gram4.htm
は判りやすそうです。
ちょっと難しくなり、言語もvb.netですが、概念も用語もVBAと同じです。
ht tp://msdn.microsoft.com/ja-jp/library/ddck1z30(VS.80).aspx
理解できるまで考えないと、見通しのよいプログラムが書きにくいとか、
この絡みでバグが出た時、大変困りますので、頑張って下さい。
理解しにくい点があれば、質問してください。わかる範囲なら相談にのります。
|
|