Functionプロシージャ

ここまでVBA基本」では、「Subプロシージャ」だけにしか触れていませんでしたが、もう一つ「Functionプロシージャ」というものがあります。

Functionプロシージャは、「Callステートメント」でも呼び出せますが、通常は「関数」として利用するものです。つまり、それ自体にデータ型を指定することができ、戻り値を持ちます。


'***************************************************************************************************
'   Functionプロシージャサンプル                                    Module1(Module)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'03/07/04(1.00)新規作成
'16/11/19(1.10)*.xlsm化の変更
'20/02/15(1.20)コード整理、標準化準拠作業
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private Const g_cnsZeirutsu As Currency = 0.1               ' 消費税率

'***************************************************************************************************
'   ■■■ シート側から呼び出される処理 ■■■
'***************************************************************************************************
'* 処理名 :TEST
'* 機能  :呼び出し側のプロシージャ
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月04日
'* 作成者 :井上 治
'* 更新日 :2020年02月15日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:あくまでもサンプルです。
'***************************************************************************************************
Public Sub TEST()
    '-----------------------------------------------------------------------------------------------
    Dim crnGaku As Currency                                         ' 税抜き金額(通貨型)
    Dim crnZei As Currency                                          ' 消費税(通貨型)
    ' InputBoxで税抜き金額を入力(字類チェックは行なっていません)
    crnGaku = InputBox("税抜き金額を入力して下さい", "消費税計算")
    ' 消費税計算(Functionプロシージャを呼ぶ)
    crnZei = FNC_SYOHIZEI(crnGaku)
    MsgBox "消費税は" & CStr(crnZei) & "円です。"
End Sub

'***************************************************************************************************
'   ■■■ サブ処理(Private) ■■■
'***************************************************************************************************
'* 処理名 :FNC_SYOHIZEI
'* 機能  :消費税計算
'---------------------------------------------------------------------------------------------------
'* 返り値 :消費税(Currency)
'* 引数  :Arg1 = 税抜き金額(Currency)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月04日
'* 作成者 :井上 治
'* 更新日 :2020年02月15日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Function FNC_SYOHIZEI(ByVal crnKingaku As Currency) As Currency
    '-----------------------------------------------------------------------------------------------
    ' 渡された金額の消費税(円未満切り捨て)を計算
    FNC_SYOHIZEI = Fix(crnKingaku * g_cnsZeirutsu)
End Function

'----------------------------------------<< End of Source >>----------------------------------------

1行しかない関数ですが、このようにFunctionプロシージャは外から見ると「関数」として機能します。「問題を渡して回答を得る」ような機能部分をこの例のように別のプロシージャに分けてやることで、機能分割していきます。