Excel VBAエキスパート体験記10(Function)

VBAエキスパート

前回はスタンダードの模擬試験を実施しました。
前回の記事はこちら

今回からはスタンダードのテキストの精読についてレポートしていきます。

なお一通り精読はしました。

ただ単元ごとの入り(特に文言)が難しいと感じたのでこれからは一つずつ学んだことをまとめていこうと思います。

具体的には文言を絵や表を使ってまとめていくことにします

理解が間違っているところもあるかもしれませんがわからない人と同じ視点に立てるのは今しかないので細かいところはご容赦ください。
間違えに気づいたら修正していきます(笑)。

なおこの体験記は短時間で効率よく勉強することを目的として書いていますので勉強の際に参考にしてもらえれば幸いです。

<今回の目的>

Functionを理解する

今回の勉強方法
  1. 1章を精読する
  2. Functionをわかりやすく説明する

2023/01/08 追記

Functionの理解については以下のサイトを読めばばっちりです

VBAに関する記事を多く書かれている和風スパゲティさんですが、料理のレシピに例えて書いてくださっているので非常にわかりやすくなっています。私のサイトよりこちらを読んでもらった方がいいと思います。

スポンサーリンク

今の立ち位置

以前の記事で説明しましたが私の今の立ち位置は以下です。

概要内容勉強時間完了の有無
(Basic)
完了の有無
(Standard)
1 公式テキストの購入安く購入できる方法を探す1時間1時間済
2 公式テキストの把握テスト形式、単元を知る1時間15分済7分済
3 公式テキスト問題集実施1スタンダード2回、ベーシックで1回実施4時間50分済30分
4 公式テキスト勉強(×部分)間違えた単元の勉強を実施。暗記はボイスメモで3時間1時間
5 公式テキスト勉強(〇部分)会っていた単元の勉強を実施。暗記はボイスメモで3時間1時間
6 公式テキスト問題集実施2スタンダード 3回実施4時間
7 3~6の繰り返し3セット実施20時間
 36時間4時間5分37分

今回は第1章のFunctionについて説明します。

結論

いきなりですが最初に結論です。人に例えて書いてみました。

Subプロシージャ:決められた処理を実行して完了連絡をしてくれる人

Functionプロシージャ:(受け取ったデータをもとに)決められた処理を実行して完了連絡と成果物を返してくれる人

でもこれだけでは何のことか?またなぜこの話が出てきたのかよくわかりません。
なので次で説明してみます

なぜ今これらのプロシージャーなのか?

これはこれまでの勉強方法によると思います。

これまでは一つのSubプロシージャの中で作業してきました。
これは一つの部屋で一人で作業しているようなものでした。
ただこの方法でも簡単なプログラムの作成は可能でいくつかの自動化は達成できるようになりました。


しかしながらプログラムが長くなるにつれ何度も似たようなコードを書くようになってきました。
また一人で繰り返すのは大変になりました。
修正の際も最初から最後まで毎回確認するのも大変になりました。

その為作業を分けて別の人にやってもらおうということにしました。
そこで今回出てきたのがSubプロシージャとFunctionプロシージャです。

これらのプロシージャはメインのプロシージャに対してある特定の処理のみを行うように設定できます。またこれらはCallステートメントという形でいつでも呼び出すことができます。

今後は一連の処理を作業ごとに分けて組み合わせていく方法に変えていくべきです。

理由としては①一つのプロシージャーのみではコードが長く可読性が下がる②よく似た作業について一回一回すべてを修正する手間が発生する為です。

なお一連の作業を分けて作成する方法をサブルーチン化というらしいです。
決まった作業はサブルーチン化しておくと他のコードでも流用できるのでこの手法を勉強しておくことは今後の役に立つはずです。

SubプロシージャーとFunctionプロシージャーを分かりやすく説明する(導入)

さて、これらを勉強してくために登場人物を3人用意しました。以下の3人です。

上司・・・メインのプロシージャにあたる。今までは一人で作業してきたが今後は作業する際に部下に頼もうと思っている

資料作れるさん・・・Subプロシージャに当たる。処理を実行して資料まで作成できる

エクセル作れるさん・・・Functionプロシージャにあたる。資料までは作れないがデータ加工が得意

この3人を使ってそれぞれを説明してみます。

Subプロシージャを分かりやすく説明する

以下は「上司」と「資料作れるさん」のやり取りです「上司」は「資料作れるさん」のの協力を得ながら資料を作成しようとしています。

①「上司」は「資料作れるさん」に資料の作成をお願いする

②「資料作れるさん」は資料を作成し、完了の報告をする

③「上司」は次の資料を作成する

まとめると「資料作れるさん」は連絡を受けると作業を実施して実行終了の連絡だけをします。
上司は完了連絡をもとに次の作業に移ることができます。

Functionプロシージャを分かりやすく説明する

以下は上司とエクセル作れるさんのやり取りです。上司はデータの加工が苦手なのでお願いしようとしています。

①「上司」は「エクセル作れるさん」にグラフ作成の為のデータ加工をお願いする。
その際に必要な情報を一緒に渡す

②「エクセル作れるさん」はデータを加工し、完了の報告をする。
合わせて成果物としてデータも送付する
③「上司」はそのデータをもとにグラフを作成する

まとめると「エクセル作れるさん」は連絡を受けるともらったデータをもとに作業を実施して成果物を渡すことになります。
なお「上司」はデータ加工された情報をもとに次の作業ができます。
一方「エクセル作れるさん」は元データをもらわないと仕事ができない状態になっています。

SubプロシージャとFunctionプロシージャどちらが良いのか

ではSubプロシージャ、Functionプロシージャどちらの方がよいのでしょうか?
これだけを聞くと「資料作れるさん」の方が優秀に思えます。

ただ実際は使い分けとなります。

「資料作れるさん」には単独で仕事ができますが連絡は完了連絡のみです。

「資料作れるさん」の出来を確認することはできません。

一方「エクセル作れるさん」はデータを渡さないと基本作業できないですが成果物(戻り)を確認しながら作業できます。

まとめると成果物が不要な作業はSub、成果物が必要な(できる)作業はFunctionを使えばよいということになります。

ここでのまとめ

Subプロシージャ:(データの受け渡しに関係なく)決められた処理を実行できる

Functionプロシージャ:(受け取ったデータをもとに)決められた処理を実行して成果物を返す

です。なお今回はFunctionのページを読むのに10分かかりました。

これらの項目はサブルーチン化していくうえで重要な項目なのでしっかりと理解していきたいです。次回は参照渡しと値渡しについて説明します。

コメント

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