VBA

【ExcelVBA】Functionプロシージャとは(やさしい図解付き)

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

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

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

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

Functionプロシージャとは?

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

オフィスワークでの例

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

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

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

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

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

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

function1

VBAでも、一つのマクロのなかで何度も同じ処理をする場合、処理を共通化することで、何度も同じコードを書く必要がありません。

この「共通化した処理」がFunctionプロシージャです。

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

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

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

これらに共通するのは、

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

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

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

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

 

Functionプロシージャの文法

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

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

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

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

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

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

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

function2 function3

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

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

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

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

だいぶイメージができあがったところで、具体的なVBAのソースコードをみていきましょう。

本体価格を渡すと税込金額が返ってくるプログラムです。

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

呼び出す側

呼び出される側

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

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

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

function5

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

もりさん
もりさん
それでは、最後におさらいしますよ!
Functionプロシージャは

①値を受け取り

②処理をして

③結果を返す

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