VBA

【ExcelVBA】Functionプロシージャとは?(図解付き)

ねぇもりさん、Functionプロシージャってむずかしいね。
「引数を渡す」とか「値を返す」とか、さっぱりわからないよ
もり
もり
わたしも最初のころは苦戦したな~
でもFunctionプロシージャをマスターしたら開発の幅がグンと広がって、楽しくなるよ

Functionプロシージャは、VBA入門者が苦手意識をもちやすい機能のひとつですね。

この記事で苦手意識を吹き飛ばして、開発の幅をグンと広げましょう!

具体的な処理を見る前に、まずはイメージづくりからしていきましょう。

Functionプロシージャとは?

もり
もり
まずは会社のこんな場面をイメージしてみよう

オフィスワークでの例

あなたの部署に、新規の派遣社員が来ることになりました。業務をしてもらうために、パソコン操作用のアカウントが必要です。

多くの企業では、社内のIT部門で専任の担当者が実施していますね。

各部署で個別にやることも可能ですが、

  • 各部署の本業にかけるべき時間が失われる
  • 不慣れな作業者が操作を間違えると、データが壊れるかもしれない(危険)

などの理由で、各部署で個別に作業するのは非効率的です。

会社全体にとっても、各部署にとっても、作業者を共通化したほうが効率的ですね。

そこでこのようなルールがあります

【アカウント発行のルール】

・各部署(依頼者)は、新規派遣の「氏名」をIT部門の担当者に伝える
・IT部門の担当者は「アカウント」を作成し、依頼者に伝える

function1

 

VBAでも、似たような処理を繰り返す場合、処理を共通化します。ここで、Functionプロシージャの登場です。Functionプロシージャに共通処理を記述します。

【依頼をする側】と【依頼を受ける側】

世の中には、「依頼をする側」と「依頼を受ける側」があります。たとえばこのようなビジネスです。

  • データを送ると、分析結果を納品してくれるコンサルティング
  • 領収書をまとめて送ると、記帳してくれる経理代行業

これらに共通するのは、

【依頼をする側】
データを渡して、処理結果を受け取る

【依頼を受ける側】
データを受け取り、処理をして、結果を返す

→Functionプロシージャは【依頼を受ける側】である

このイメージがつかめればオッケーです。

Functionプロシージャの文法

それでは具体的な文法をみていきましょう。

【呼び出す側】(依頼をする側)

①返り値を変数に格納する場合

②返り値を直接使用する場合(Boolean型など)

Subプロシージャを呼び出す際はCallステートメントを使用し Call プロシージャ名 と記述しますが、Functionプロシージャを呼び出す際は、Callステートメントは使用しません。

【呼び出される側】(依頼を受ける側)

アカウント作成処理にあてはめてみると

function2 function3

番号①②③の対応関係は下記のとおりです

【呼び出す側】
①引数を渡して呼び出す

【呼び出される側】
②処理する
③処理結果を返す

Functionプロシージャのコードをみてみよう

具体的なVBAのソースコードをみていきましょう。本体価格を渡すと税込金額が返ってくるプログラムです。

  • 引数:本体価格
  • 返り値(戻り値):税込価格

呼び出す側

呼び出される側

これがFunctionプロシージャです。

実行結果がこちらです。
function4

値の流れはこうなっている

function5

以上がFunctionプロシージャのイメージです。

もり
もり
それでは、最後におさらいしよう!
Functionプロシージャは
  1. 値を受け取り
  2. 処理をして
  3. 結果を返す

これを使いこなせると、開発の幅がグンと広がって、あっという間に脱・入門です!がんばって!