Excel VBA > Excel上級:マクロ > Functionプロシージャに「ありがたみ」を感じるためには
このエントリーをはてなブックマークに追加

Functionプロシージャに「ありがたみ」を感じるためには

Functionプロシージャがあってよかった!と思えるために・・

Functionプロシージャというのは、慣れてないと「なぜ使うのか」、「いつ使うのか」などがなかなか把握できなかったりします。
これはなぜか?更にいろいろ考えたのですが、「ありがたみ」を感じるためには、ある程度の前提知識や経験が必要ではないかと言う点です。
なお、厳密に説明することは難しく、ある程度緩さを含めています。その意味では結構突っ込めるところもありますが無視願います(笑)。

Functionプロシージャのおさらい

Functionプロシージャの利用方法としてExcel VBAでは、下記の2種類です。

1.Excelシートに埋め込む使い方(SUM、IFなどの同じ扱いで独自関数として使う)
2.Subプロシージャと連動してプログラム上でのみ使う

ここで説明するのは後者です。
そしてその場合、Functionプロシージャの呼び出され方も確認すると

3.プログラム(処理)開始時に利用できない(Subはできる)
4.プログラム(処理)終了時に利用できない(Subはできる)

ということになります。つまりFunctionは「中継ぎ」的なイメージですね。
function_arigata_1164_01

ただ、困ったのがここで挙げた説明に対してSubプロシージャでは「1」以外は全て「可能」であることです
言い換えると、Subでも代替できるため、Functionの必要性の有無判断を混乱させる要因になっていると思います。
もっと言えば、Functionでなくてもいい(Subだけでできる)とも言えます。
職場や個人でコーディング規約等が無ければ、Functionを入れる、入れないは作り手側の一存で決められるため余計遠い場所にあるのかもしれません。

そこで、このような特徴を元にさらに考えていくと「ありがたみ」を感じるために、以下の前提が必要になりそうです。

Subプロシージャ「単体」で処理を完結していない

マクロの記録で作成したコードを、付け足すような形で1つのSubプロシージャの中に含め、長い処理(プロシージャ)をメインに作っている方などは、Functionの意味が遠のくかもしれません。

↓は、サブルーチン化されてないのでFunctionの役割がイメージできにくいかも?
function_arigata_1164_02

先ほど説明したように、Functionは「中継ぎ」的な役割を持っています。
他のSub(またはFunction)プロシージャ[A]から呼ばれ、Functionが実行し、呼び出し元[A]に戻るという流れです。
そのため、仮にSubプロシージャのみの構成であっても、「親プロシージャ」と「子プロシージャ」など分け、複数のプロシージャにしてコール(Call)して使うようなコーディング(構成)をしていないと、Functionのありがたみを感じるのは難しいかもしれません。

↓は、サブルーチン化されている人はFunctionのイメージがしやすいかも?
function_arigata_1164_03

プロシージャ間の引数を使える

もっともだからと言って、一つのSubプロシージャで完結しているものを無理やり分けるだけでなく、サブルーチン化する際に引数の使い方も考慮する必要があります。それはなぜか?
というのも、SubやFunctionで使用する引数は、値の受け渡しで使いますが、その引数を使わないでもPublic変数などで代替できるため、その意味を分かって(Public変数を使わないで)引数を使う→サブルーチン化というのが必要だと思います。
こうすることでFunctionプロシージャは、「入力は引数」、「出力は戻り値」ができるという使い方ができます。すると必然的(使い回しがきく、汎用的になる)に?Functionプロシージャは複数のプロシージャから呼び出されることにもなります。
function_arigata_1164_04

大まかなまとめ

このように見ていくと、Functionプロシージャのありがたみを感じるためには、VBAの仕様に近い内容が理解できてないと難しいということになり、それはある意味「当たり前」でもあるので、心情としてはちょっと本末転倒なところもあります。
ですが、これらを理解できてくると「あっ、ここはFunctionの方がいいな」ではなく、「Functionが必要なんだ」という気持ちにさえなるのではないかと思います。
ただ、「それでもわからん!」と言う方は、弊社のレッスンも参考にして頂いてはいかがでしょうか(笑)

カテゴリ:Excel上級:マクロ