Functionプロシージャ
面積の計算のようなサブルーチンを作成する場合、その計算結果を基にさらにいろいろと計算したい場合もあるでしょう。この場合、サブルーチンで計算した結果をどのように使うかは、さまざまなケースがあるわけですから、そのサブルーチンだけでは対処できません。ですから、サブルーチンで計算結果を表示するのではなく、計算だけを行って、その結果を呼び出し元に返し、呼び出し元でいろいろな処理をするようにします。つまり、サブルーチンから呼び出し元にデータを返す機能です。これは引数と逆方向のデータの流れです。引数は呼び出し元からサブルーチンに対し情報を渡します。逆にサブルーチンから呼び出し元へデータを返す動きは「戻り値」といいます。

VBScriptの場合、戻り値を返すサブルーチンは Functionプロシージャといって Subプロシージャとは区別されます。Functionプロシージャと Subプロシージャの機能の違いは戻り値があるか、ないかということだけです。Functionプロシージャは戻り値を一つだけ返すことが出来ます。
具体的には、戻り値を返すというのはどういうことなのでしょうか? 呼び出し元の例を見てみましょう。たとえば、先ほどの menseki サブルーチンが戻り値を返すとします。その戻り値を変数 m に入れるとしたら以下のようになります。
m = menseki(h)
mensekiプロシージャに引数を渡すときに()をつけていることに注意してください。Functionプロシージャの場合、()を書いて、その中に引数を書くようにします。そして、プロシージャ名の前に「m = 」と書いています。このようにするとサブルーチン menseki が計算した戻り値が m に入ることになるわけです。
これは今まで使ってきたCIntなど関数の機能と同じです。Functionプロシージャとは、自分で関数を作ることなのです。
では、menseki の方ではどのように書けばいいのでしょうか? まず、今までSub と書いていたところが、Function に変更になります。
Function menseki( hankei ) menseki = hankei * hankei * 3.14 End Function
そして、計算した結果を menseki に代入しています。mensekiというのはこのサブルーチンの名前でもありますね。このようにサブルーチンの名前に値を代入することで、そのサブルーチンの戻り値を指定するわけです。この例では、hankei * hankei * 3.14 の結果が戻り値になっています。たとえばhankeiが10だとすると戻りは314になるわけです。
そして、呼び出し元では
m = menseki(h)
とmensekiの前に m=と書いていますから、変数 m に314が代入されることになります。
ここで処理の順番を確認しておきましょう。
1.まず引数としてhの内容がmensekiサブルーチンのhanekiに渡されます。
2.mensekiの処理を実行します。つまり、hankei * hankei * 3.14 を計算して、結果を戻り値にします。
3.戻り値がmに代入されます

戻り値の考え方としては、menseki(h) と書かれているところが戻り値(たとえば 314 )に置換されると思えばいいでしょう。だから
MsgBox menseki(100)
と書くことも出来ます。この場合、314と画面に表示されます。
☆Functionプロシージャの書き方 呼び出し方: 戻り値を入れる変数 = プロシージャ名(引数,引数,・・・) 呼び出されるFunctionプロシージャの書きかた: Function プロシージャ名(引数,引数・・) 処理・・ プロシージャ名 = 戻り値にしたい値 End Function
問題10-5:
三角形の面積を求める関数を作ろう。引数は、底辺と高さで面積を返す。
問題10-6:
サイコロ(1~6)の値を返す関数を作ろう。
注