[Excel2013 で VBA] 引数のある Sub プロシージャ




引数のあるプロシージャ

本日の最後に、プロシージャに対する引数について学ぶ。

プロシージャとは、ある機能をひとまとめにしたものであり、その機能をプログラムの他の位置から呼び出す際に用いるのだった。

言い替えると、あるプロシージャから別のプロシージャへ作業を依頼する、というとらえることもできる。
上の例をそのようにとらえ直すと、 となる。

ここでプロシージャ namae と aisatsu の機能を考えてみると、 それぞれ "私の名前は◯◯◯◯です" および "よろしくお願いします" と表示するだけで、
他のことは全くできない。

表示する文字列を prog8_1 から指定できれば、 より汎用性が高い (より広く使える) プロシージャと言える。

このように、プロシージャを呼び出す時に何か指定を与えたいとき、 プロシージャに引数 (ひきすう) を渡すことで実現する。

引数は、プロシージャの宣言の () の内部で変数を宣言することで実現される。

以下の具体例を見るのが良いだろう。
プロシージャ namae は不要になり、aisatsu のみになっていることに注意。



まず、aisatsu から見てみるとカッコ内に 文字列変数の宣言があるのがわかる (ただし Dim はない)。
これにより、aisatsu 内部で文字列変数変数 s が使えるようになる。

Sub aisatsu(s As String)


実際に aisatsu が行っているのは

MsgBox s 


なので、文字列 s を表示するだけである。

ここでわかるように、プロシージャ aisatsu ではどのような文字列を表示するのか全く指定していない。
指定を与えるのは、aisatsu を呼び出す側、すなわち prog8_1 なのである。

aisatsu "私の名前は◯◯◯◯です"


prog8_1 では上のように、aisatsu の呼び出し方式が変化している。

これを言葉で言うと、 ということなのである。 そして、aisatsu に与えられた文字列 "私の名前は◯◯◯◯です" が aisatsu 内部では変数 s として利用される、というわけである。

さらに、複数の引数を用いることもできる。



上の例は、名前 (name As String) および 年齢 (age As Integer) を引数として受け取り、
「私の名前は name です。age 歳です。」表示するプログラムである。

引数 (name と result) の宣言がコンマで区切られているのがわかる。

prog8_6 内部での呼び出し側も、「nenrei "エクセル太郎", 18」とコンマで区切られているのがわかる。

結果として、「私の名前はエクセル太郎です。18歳です。」と表示される。



←プロシージャと変数Function プロシージャ→

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