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自体も修正されることになります。なのでイミディエイトウィンドウの出力は以下のようになります。
スポンサーリンク