プロシージャの引数【Excel VBA】

Excel VBA


前回の頁で軽くご説明した「引数」ですが、今回はもう少し掘り下げてご説明したいと思います。

引数として渡す値の種類

引数に渡す値は、デフォルトでは「値渡し」となっており、引数として渡された値を変更することはできません。 この「値渡し」ではない渡し方として、「参照渡し」という方法があります。

値渡し

引数が「値渡し」で渡された場合は、プロシージャ内で引数に対して別の値を格納しても、プロシージャ終了時には変更が保管されません。

例文を見てみましょう。

このプログラムを実行すると、下の画像のようになります。

スクリーンショットの画面 自動的に生成された説明

プロシージャ内で引数に対して別の値を格納していますが、プロシージャから出ると元に戻っていることがわかると思います。

参照渡し

プロシージャ作成時に、引数の宣言に「ByRef」をつけることで「参照渡し」にできます。

「参照渡し」で引数をプロシージャに渡した場合、プロシージャ内で受け取った引数への変更を保持したまま、呼び出し元へ戻すことができます。

まずは「参照渡し」にする場合の構文から見てみましょう。

「ByRef」ステートメントを入れることで、参照渡しにすることができます。 「ByRef」を入れない場合はデフォルトの「値渡し」となりますが、「値渡し」を明確に表したい時は、「ByVal」ステートメントを入れても同じ結果になります。

余談ではありますが、「ByVal」は「By Value」(値で)、「ByRef」は「By Reference」(参照により)を表しています。

それでは簡単な例文を記述します。

このプログラムを実行すると、下の画像のようになります。

スクリーンショットの画面 自動的に生成された説明

プロシージャ内で変数の値が変更されているのがわかりますね。

値渡しと参照渡しの違い

値渡しで変数を渡すと、変数に格納されている「値」だけを渡すことになります。 参照渡しの場合は、「変数そのもの」を渡すことになります。 どちらのケースも使い所があるため、用途によって使い分けられるとベターですね。

今回のまとめ

  • プロシージャの引数として「値渡し」と「参照渡し」がある
  • 「値渡し」は値のみを渡す
  • 「参照渡し」は変数そのものを渡す

コメント

タイトルとURLをコピーしました