「引数を渡す」とか「値を返す」とか、さっぱりわからないよ
でもFunctionプロシージャをマスターしたら開発の幅がグンと広がって、楽しくなるよ
Functionプロシージャは、VBA入門者が苦手意識をもちやすい機能のひとつですね。
この記事で苦手意識を吹き飛ばして、開発の幅をグンと広げましょう!
具体的な処理を見る前に、まずはイメージづくりからしていきましょう。
Contents
Functionプロシージャとは?
オフィスワークでの例
あなたの部署に、新規の派遣社員が来ることになりました。業務をしてもらうために、パソコン操作用のアカウントが必要です。
多くの企業では、社内のIT部門で専任の担当者が実施していますね。
各部署で個別にやることも可能ですが、
- 各部署の本業にかけるべき時間が失われる
- 不慣れな作業者が操作を間違えると、データが壊れるかもしれない(危険)
などの理由で、各部署で個別に作業するのは非効率的です。
会社全体にとっても、各部署にとっても、作業者を共通化したほうが効率的ですね。
そこでこのようなルールがあります
【アカウント発行のルール】
・各部署(依頼者)は、新規派遣の「氏名」をIT部門の担当者に伝える
・IT部門の担当者は「アカウント」を作成し、依頼者に伝える
VBAでも、似たような処理を繰り返す場合、処理を共通化します。ここで、Functionプロシージャの登場です。Functionプロシージャに共通処理を記述します。
【依頼をする側】と【依頼を受ける側】
世の中には、「依頼をする側」と「依頼を受ける側」があります。たとえばこのようなビジネスです。
- データを送ると、分析結果を納品してくれるコンサルティング
- 領収書をまとめて送ると、記帳してくれる経理代行業
これらに共通するのは、
【依頼をする側】
データを渡して、処理結果を受け取る
【依頼を受ける側】
データを受け取り、処理をして、結果を返す
→Functionプロシージャは【依頼を受ける側】である
このイメージがつかめればオッケーです。
Functionプロシージャの文法
それでは具体的な文法をみていきましょう。
【呼び出す側】(依頼をする側)
①返り値を変数に格納する場合
1 |
変数 = プロシージャ名(引数) |
②返り値を直接使用する場合(Boolean型など)
1 2 3 |
If プロシージャ名(引数) = False Then '~処理~ End If |
Subプロシージャを呼び出す際はCallステートメントを使用し Call プロシージャ名
と記述しますが、Functionプロシージャを呼び出す際は、Callステートメントは使用しません。
【呼び出される側】(依頼を受ける側)
1 2 3 4 |
Function プロシージャ名(引数 As データ型) As 返り値のデータ型 '~処理~ プロシージャ名 = 返り値 End Function |
アカウント作成処理にあてはめてみると
番号①②③の対応関係は下記のとおりです
【呼び出す側】
①引数を渡して呼び出す
【呼び出される側】
②処理する
③処理結果を返す
Functionプロシージャのコードをみてみよう
具体的なVBAのソースコードをみていきましょう。本体価格を渡すと税込金額が返ってくるプログラムです。
- 引数:本体価格
- 返り値(戻り値):税込価格
呼び出す側
1 2 3 4 5 6 7 8 9 10 11 |
Sub メイン処理() Dim BasePrice As Long '本体価格 Dim Tax_included_Price As Long '税込価格 BasePrice = 100 Tax_included_Price = 金額計算(BasePrice) MsgBox "税込価格は" & Tax_included_Price & "円です。" End Sub |
呼び出される側
これがFunctionプロシージャです。
1 2 3 4 5 6 7 |
Function 金額計算(ByVal BasePrice As Long) As Long Const TAX_RATE As Currency = 1.08 金額計算 = BasePrice * TAX_RATE End Function |
実行結果がこちらです。
値の流れはこうなっている
以上がFunctionプロシージャのイメージです。
- 値を受け取り
- 処理をして
- 結果を返す
これを使いこなせると、開発の幅がグンと広がって、あっという間に脱・入門です!がんばって!