Functionプロシージャ

広告

プロシージャにはSubプロシージャだけではなく、Functionと言うプロシージャが用意されています。Functionプロシージャの大きな特徴は呼び出し元に値を戻す事ができることです。その為、あたかも関数のように動作しますのでユーザー定義関数とも言います。

例えば複雑な計算をするプロシージャを用意し、実行した結果を受け取るような事が出来るわけです。

Functionプロシージャの構文は次のようになっています。

まず定義を見ておきます。プロシージャを呼び出す方は変更がありませんが、呼び出される方のプロシージャにて、引数の定義の仕方が異なります。

Function プロシージャ名(引数 As データ型) As 戻り値のデータ型
    プロシージャ名 = 戻り値
End Function

プロシージャ内で様々な処理を行った後で、プロシージャ名に値を格納することで呼び出し元に値を返す事ができます。この返される値を戻り値と言います。例えばInteger型の引数を1つ受け取り、戻り値としてString型の値を返すようなプロシージャは次のようになります。

Function hantei(ByVal tokuten As Integer) As String
    Dim kekka As String

    If tokuten >= 80 Then
        kekka = "合格"
    Else
        kekka = "不合格"
    End If

    hantei = kekka
End Function

次に呼び出し元の方です。Functionプロシージャを呼び出すと同時に、呼び出したFunctionプロシージャから戻ってくる値を受け取るように記述しなければなりません。

Sub テスト()
    Dim kekka As String

    kekka = hantei(75)
End Sub

上記の場合、「hantei」プロシージャを呼び出すと、「hantei」プロシージャ内で処理が行われた結果、値が戻ってきます。その戻ってきた値が変数「kekka」に格納されるわけです。

このようにFuctionプロシージャを使うことで、自分で関数を定義するように何か処理を行った結果を返す事ができるプロシージャを定義することが出来ます。

サンプルプログラム

では簡単なサンプルで試してみます。

testsub5.bas

Sub テスト()
    Dim kekka As String

    kekka = hantei(75)
    Range("A1").Value = kekka
    
    kekka = hantei(92)
    Range("A2").Value = kekka
    
End Sub

Function hantei(ByVal tokuten As Integer) As String

    Dim kekka As String

    If tokuten >= 80 Then
        kekka = "合格"
    Else
        kekka = "不合格"
    End If

    hantei = kekka

End Function

上記のマクロを実行すると次のようになります。

Functionプロシージャ

( Written by Tatsuo Ikura )