MW211 EXIT

devlog
ExcelVBA/引数の参照渡しと値渡し
2014年09月30日
なんと、VBAでは「参照渡し」がデフォルトなのだ。要注意。

【参照渡し(アドレス渡し)】(既定)
┌──────────────────────────────────────┐
│Sub 関数(引数)                                                              │
│    処理                                                                    │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Sub 関数(ByRef 引数)                                                        │
│    処理                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
→指定した引数が、関数内の処理により影響を受ける。(速度が速い)

【値渡し】
┌──────────────────────────────────────┐
│Sub 関数(ByVal 引数)                                                        │
│    処理                                                                    │
│End Sub                                                                     │
└──────────────────────────────────────┘
→指定した引数が、関数内の処理により影響を受けない。

ちなみに、以下のように実験してみたところ、結果は「参照渡し」が出力された。
つまり、既定(指定なし)は、参照渡しということが確認できる。
┌──────────────────────────────────────┐
│Sub 実験()                                                                  │
│    Dim 変数 As String                                                      │
│    変数 = "値渡し"                                                         │
│    Call サブ関数(変数)                                                     │
│    MsgBox 変数                                                             │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Sub サブ関数(変数 As String)                                                │
│    変数 = "参照渡し"                                                       │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA