基礎から学ぶVBAプログラミング教室

もりさんのお題を解きながら楽しく勉強しよう

スポンサーリンク

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

引数を渡す?

値を返す?

f:id:excel-accounting:20180424112139p:plain:w150


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

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


f:id:excel-accounting:20180511155856p:plain:w400

Functionプロシージャの説明は市販の書籍やネット上の他サイトにたくさん載っていますので、この記事では、それらを筆者なりにかみくだいて、解説していきます。


具体的な処理を見る前に、まずはイメージをつかむこと!

これがプログラムの勉強では大事です。

f:id:excel-accounting:20180428154537p:plain:w100


しっかりとイメージづくりからしていきましょう。

Functionプロシージャのイメージ

【オフィスワークでの例】
あなたの部署に、来月1日付けで新規派遣者が来ることになりました。
業務をしてもらうためには、パソコン操作用のアカウントが必要です。

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


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

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

などの理由で、個別に行うのは非効率的であり、

作業者を共通化したほうが、会社全体にとって効率的だからです。

【イメージ図】

f:id:excel-accounting:20180511190052p:plain


【その他の例】

  • データを送ると、分析結果を納品してくれるコンサルティング(業務委託)
  • 領収書をまとめて送ると、記帳してくれる経理代行業
  • 飲食店や学校給食の食事を、一極集中で作るセントラルキッチン


これらのように、

世の中には【依頼をする側】【依頼を受ける側】の2者の立場があります。

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

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


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

こうして処理を共通化することで、一つのマクロのなかで同じ処理を何度も書かずにすむので効率的になるのです。


では、もう一度繰り返しますよ。

Functionプロシージャは、

①データを受け取り、

②処理をして、

③結果を返す。


このイメージがつかめればオッケーです。
f:id:excel-accounting:20180511223322p:plain:w120


Functionプロシージャの文法

それではこの流れで文法をみていきましょう。

【呼び出す側】(依頼をする側)
①返り値を変数に格納する場合

変数 = プロシージャ名(引数)

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

If プロシージャ名(引数) = False Then
    '~処理~
End If

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

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

Function プロシージャ名(引数 As データ型) As 返り値のデータ型
    '~処理~
    プロシージャ名 = 返り値
End Function


この文法を、さきほどのアカウント作成処理にあてはめてみます。

f:id:excel-accounting:20180511191147p:plain
※データ型は省略しています
f:id:excel-accounting:20180526192108p:plain:w500

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

呼び出す側が、
①引数を渡して呼び出す

呼び出された側は、
②処理する
③処理結果を返す


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

有名な金額計算プログラムです。

本体価格を「引数」として受け取り、税率をかけて税込価格を「返す」機能です。

ソースコード

【呼び出す側】

Sub メイン処理()

    Dim BasePrice As Long '本体価格
    Dim Tax_included_Price As Long '税込価格
    
    BasePrice = 100
    Tax_included_Price = 金額計算(BasePrice)

    MsgBox "税込価格は" & Tax_included_Price & "円です。"

End Sub

【呼び出される側】Functionプロシージャ

Function 金額計算(ByVal BasePrice As Long) As Long

    Const TAX_RATE As Currency = 1.08
    
    金額計算 = BasePrice * TAX_RATE

End Function

【実行結果】
f:id:excel-accounting:20180511190806p:plain:w200

【図解】
f:id:excel-accounting:20180512010718p:plain



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



それでは、最後にもう一度おさらいしますよ!

Functionプロシージャは、

①データを受け取り、

②処理をして、

③結果を返す。


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

f:id:excel-accounting:20180429192409p:plain:w150

引き続きがんばりましょう!

スポンサーリンク