[Excel2013 で VBA] 引数の内容を変更するプロシージャ

本ページでは「引数の内容を変更するプロシージャ」を扱う。
引数は前回学んだ「Sub プロシージャ」、今回学んだ「Function プロシージャ」どちらにも登場するが、
以下では「引数のある Sub プロシージャ」を用いて解説する。



2 つの変数の内容を交換する

まず、プロシージャを用いない例で解説しよう。
すなわち、第一回から学んでいるような、メインの Sub プロシージャ 1 つのみを用いたプログラムである。

ここで考えるのは、「2 つの変数の内容を交換する」プログラムである。
すなわち、「x = 5、y = 1」であるとき、これを「y = 1、x = 5」に変更するようなプログラムである。

これは特に新しい知識を必要とせず、以下の様に記述できる。

作業用の変数として 3 つ目の変数「tmp」を用いている点に注意が必要であるが、
それ以外は理解は容易であろう。



これを Sub プロシージャを用いて書いてみよう。



引数の内容を変更するプロシージャ

実際に記述すると以下のようになる。



入れ換えの部分が Sub プロシージャ swap に記述されていることに注意 (swap とは「交換」の意味)。

このように、Visual Basic では、プロシージャに引数を与え、その引数の値を プロシージャ内で変更することができる。

[補足]

以上を読んで「当たり前じゃないか?」と思うかも知れない。
確かに Visual Basic では「プロシージャに引数を与え、その引数の値をプロシージャ内で変更することができる」のであるが、
実は C 言語や C++、Java など他のプログラミング言語では「プロシージャに引数を与え、その引数の値をプロシージャ内で変更すること」は (そのままでは) できない。

Visual Basic では引数を渡す際に参照渡し、他の言語では 値渡しを用いるために上記のような違いが生ずるのである。

Visual Basic の上記のような性質を強調する意味で、このページの解説を設けたわけである。




←Function プロシージャプロシージャの再帰的呼び出し→

Excel 2013 で学ぶ Visual Basic for Applications (VBA)に戻る