プロシーシャの引数と返り値

プログラミング

はじめに

 VBAのプロシージャには、SubFunctionがあります。
 両者とも引数を持つ事ができ、Function返り値を持つ事ができます。
 
 引数とは、プロシージャに与える値の事で、インプットにあたります。
 返り値とは、プロシージャが吐き出す値の事で、アウトプットです。
 ※返り値は「戻り値」と言うこともあります。

 引数や返り値を持つプロシージャは、通常外部から呼び出して使う事になり、単独で使う事はありません。
 プロシージャを部品化して使いたい場合などでは、引数や返り値を使う事になります。

引数の使い方

 引数を指定したい場合は、引数の変数名と変数型を、カンマで区切って書いていきます。
 変数型を省略するとバリアント型を指定したのと同じになります。
 Functionの場合も書き方は同じです。

  Sub プロシージャ名 (引数1 As 変数型, 引数2 As 変数型)
   …
  End Sub

例題プログラム

 次のプログラムは a, b 2つの引数を与えると、大きい方をイミディエイトウィンドウに表示します。

Sub myMax(a As Long, b As Long)
    If a > b Then
        Debug.Print a
    ElseIf a = b Then
        Debug.Print "等しい"
    Else
        Debug.Print b
    End If
End Sub

 上のプログラムを実行するのは、引数を与える必要があるので実行用のプログラムが必要になります。
 引数のあるプログラムを実行するには、2通りの書き方があります。

Sub testCode()
    myMax 1, 2
End Sub

Sub testCode2()
    Call myMax(1, 2)
End Sub

 どちらを使っても構いません。

返り値の使い方

 返り値を使いたい場合は、Subは使えませんのでFunctionになります。
 返り値は引数の()の後に、返したい変数型を書きます。
 プロシージャの中で、「プロシージャ名 = 返り値」という書式で値を返します。

  Function プロシージャ名 (引数1 As 変数型, 引数2 As 変数型) As 返り値変数型
  ….
    プロシージャ名 = 返り値
  End Function

例題プログラム

 次のプログラムは a, b 2つの引数を与えた時、a が大きい場合は 1 を、b が大きい場合は -1 を、等しい場合は 0 を返します。

Function getMyMax(a As Long, b As Long) As Long
    Dim result As Long
    result = 0
    
    If a > b Then
        result = 1
    Else
        result = -1
    End If

    getMyMax = result
End Function

  上記のプログラムを実行するためのプログラムは以下のようになります。
  返り値を返さない場合と異なり、書き方は1種類だけです。

Sub testCode3()
    Dim a As Long
    Dim b As Long
    a = 3
    b = 2

    If getMyMax(a, b) > 0 Then
        Debug.Print "aの方が大きい"
    End If
End Sub

Functionの定番の書き方

 例題の getMyMax は以下のように result を使わずに書く方法もありますが、良い方法とは言えません。

Function getMyMax(a As Long, b As Long) As Long
    If a > b Then
        getMyMax = 1
    ElseIf b > a Then
        getMyMax = -1
    Else
        getMyMax = 0
    End If
End Function

 この場合、プロシージャ名を変更しようとした時、4カ所全てを書き変える事になります。
 もし書き換えを忘れた場合は、エラーとなります。
 
 値を返す「プロシージャ名 = 返り値」という部分は1つにした方が、見通しも良くなり改造や変更する時に便利です。
 
Function プロシージャ名 引数1 As 変数型, 引数2 As 変数型) As 返り値変数型
  Dim 返り値用変数 As 返り値と同じ変数型
  返り値用変数 = デフォルト値
  ….
  ….
  プロシージャ名 = 返り値用変数
End Function

 返り値用変数のデフォルト値は、初期値をセットするようにします。
 数値型であれば 0 、ブール型であれば False などをセットしておくのが一般的です。

まとめ

 プログラムに慣れてくると、処理ごとにプロシージャを分割して呼び出して使いたい場面が出てきます。
 そのような時、引数や返り値を設定する事が必須になるでしょう。
 
 「Functionの定番の書き方」で紹介した方法は、他ではあまり語られませんが便利な書き方なので是非マスターしていただければと思います。
 以下に詳しく解説していますので、参照してみてください。
 ・Functionお決まりの書き方

タイトルとURLをコピーしました