VBA:オブジェクトを関数に渡す/関数から返す方法
VBAで関数にオブジェクトを渡したり、関数から返す場合の方法です。基本的にSetステートメントをつければ可能になります。
以下の例は、DictionaryオブジェクトをgetObj関数に渡し、更にそのオブジェクトを返す例となります。尚、オブジェクトは基本参照渡しなので返すまでもなく渡した先でmyDicが修正されてしまいます。なので返す必要がないのですが、今回の例を示すためにあえてそのように書いています。
Sub test()
Dim myDic, Result As Object
Set myDic = CreateObject("Scripting.Dictionary")
myDic("A") = 0
myDic("B") = 0
myDic("C") = 0
Set Result = getObj(myDic)
For Each dic In myDic
Debug.Print myDic(dic)
Next
End Sub
Function getObj(myDic) As Object
myDic("A") = 1
myDic("B") = 2
myDic("C") = 3
Set getObj = myDic
End Function
※参照渡しについて追記。参照渡しとは相手に値をコピーするのではなく変数のメモリ番地を渡す方法です。なので、渡した先でも同じ番地の値を修正します。getObj関数に渡したmyDicに値を入力していますが同時に同じ参照先である元のプロシージャのmyDic自体も修正されることになります。なのでイミディエイトウィンドウの出力は以下のようになります。
スポンサーリンク