トップページ

#14_3 参照渡しと値渡し


参照渡しとByRefキーワード

サブルーチンの節でちょっとだけ話しましたが、マクロ間で引数を渡す方法には「参照渡し」と「値渡し」という2種類があります。通常は「参照渡し」で引数を渡しているのですが、ここでは両者の違いを明確に理解していきましょう。

変数とメモリまで遡ると、変数の定義とは「計算結果やプロパティなどの値を格納しておくメモリ領域」です。メモリには番地(アドレス)が割り振られており、VBAで作成したマクロはこのアドレスでメモリの位置を識別しているのです。

「参照渡し」とは、呼び出されたマクロが、受け取った変数のアドレスを直接操作できる渡し方なのです。(他のプログラミング言語におけるポインタの概念と似ています。)

「参照渡し」である事を明示したいのであれば、ByRefキーワードを用いる事ができます。また、すでにご存知のように、省略しても参照渡しになります。

値渡しとByValキーワード

上の参照渡しとは、変数の格納位置(アドレス)を渡し、受け取ったマクロがその変数の値を書き換えていました。一方で「値渡し」とは変数のコピーをマクロに渡す方法であり、オリジナルの変数を書き換えることはできません。

「値渡し」であることを明示的に宣言する場合には、ByValキーワードを使います。