非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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

スポンサーリンク

 - VBA