戻り値を返すFunctionは優秀な「忍び」かい!?

ExcelVBA
ネコヲ
ネコヲ

こんにちは。ネコヲです。ブラック企業に勤める40代事務員です。

2021年6月16日に参加したノンプロ研初心者向け講座【VBAコース】第三回の講義レビュー後編です。

今回も、双子の兄ゆっさんと、そしてトレーニングマニアのネジータをアシスタントにお送りします。

ゆっさん
ゆっさん

俺のこと、安く使うなよ!

ネジータ
ネジータ

トレーニングをなめんじゃねえ!

それでは、いってみましょう~。

今回は「関数」です。

ゆっさん
ゆっさん

つーか、プログラミングって「〇数」って多くねえか?「変数」「引数」ときて今度は「関数」か?で、関数ってのはなんなんだ?

関数とは「戻り値」を持つプロシージャのことです。

ネコヲ
ネコヲ

するって~と、前回の記事で登場した「Functionプロシージャ」ってのは、関数になんのか?

そうです。

Functionプロシージャ = 関数 です。

Functionは呼び出し元に処理を戻す役割

FunctionはSub(親玉)から引数をもらい「値の判定」を行ったあとは、Sub(親玉)側に処理を戻します。で、それ以降の処理はSub(親玉)側が行います。

ネコヲ
ネコヲ

重要な情報を提供する「忍び」みたいな感じ?

Functionプロシージャの宣言の仕方は次の通りです。

Function プロシージャ名(パラメータ1 As型,パラメータ2 As型,・・・)As 型
’処理
プロシージャ名 = 戻り値
End Function
ネジータ
ネジータ

う~ん、まだ俺はつかめない!つかんでいない。

では、実際に問題を解いてみましょう。

(引用画像:ノンプロ研VBA講座資料)

回答例がこちら。

ここで注目したいのが、イミディエイトウィンドウに結果が出力されるタイミングです!

ネコヲ
ネコヲ

おお!呼び出し元側で結果が出力されているね。

ゆっさん
ゆっさん

なるほど、Functionプロシージャは結果を戻してるな~。優秀な忍びじゃねえか!

Subプロシージャ→Subプロシージャの場合は?

Functionプロシージャの問題を行う前に、Subプロシージャ同士で処理を受け渡す問題がありました。Subプロシージャの場合、戻り値がないので、引数を渡したら、受けた側が結果を返します。

(引用画像:ノンプロ研VBA講座資料)

そしてこの問題を解くときに、ネコヲは「戻り値」を全く理解していなかったことに気がつくのでした。

まずは回答例がこちら

それに対し、ネコヲの珍回答がこちら

これ、何が珍回答かっていうと、

ゆっさん
ゆっさん

戻り値がないのに、よくわかってなくて、なんとなく雰囲気でコード書いてる典型例だな~。とりあえず1つめのSubに戻ろうと必死な感じが伝わってくるぞ。

ネジータ
ネジータ

動作を見ろ!初学者はとにかくF8キーで一つ一つの動作を確かめろ!検証が大事だ。

ネコヲ
ネコヲ

まあ、間違えたからわかることもあるんだよ。積極的に間違えていこうぜ笑

その他 他の人の書いたコードがめちゃくちゃ参考になる!

他の人の回答を見ると、自分の書いたコードと比較できてとても参考になります。

例えば、次の問題。

(引用画像:ノンプロ研VBA講座資料)

ネコヲの書いたコードがこちら

ネコヲ
ネコヲ

IF~文を使っております(ドヤッ!)

それに対して、講師陣の回答例がこちら!

 

まずは回答例①

回答例②がこちら!

ネジータ
ネジータ

スマートだ!贅肉が削ぎ落されていている。

ゆっさん
ゆっさん

ネコヲのに比べて短くて簡潔だな。

ネコヲ
ネコヲ

boolean型こうやって使うのか~。参考になります!

まとめ

第3回講義はまだまだ内容盛りだくさんで、ここに書ききれないこともたくさんありました。

おさらい

・プロシージャにはいろいろあるが、まずはSubプロシージャとFunctionプロシージャをしっかりおさえる

・戻り値を得たいときはFunctionプロシージャ、ただ実行するだけだったらSubプロシージャを使う

・Subプロシージャ、Functionプロシージャのパラメータには「ByVal」をつける

・Subプロシージャを呼び出すときは、Callを頭につける

ネコヲ
ネコヲ

とにかくコードに触れて、Try&Errorを繰り返していきやす!

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