VBAのFunctionプロシージャとは?Functionプロシージャの構文や使い方
VBAの作成時に、プロシージャの結果を呼出し元で使用したい場合、Functionプロシージャ内でプロシージャ名に値を設定することで値を返すことができます。ここでは、基本的な使い方について説明していきます。
目次
1.Functionプロシージャについて
1-1.Functionプロシージャとは
Functionプロシージャとは、VBA内で特定の処理を行い、値を返すプロシージャのことです。単体で使用するのではなく、他のプロシージャから呼ばれることがほとんどです。
1-2.Functionプロシージャの構文
Functionは、下記のように記述します。
「スコープ」 Function 「関数名」 (引数 as 引数の型) 戻り値の型
1-2-1.スコープ
スコープには、下記の3種類があります。省略可能で、省略した場合は「Public」が設定された状態と同じになります。
1)Public
すべてのモジュールから参照したい場合に設定します
2)Private
Functionプロシージャを記述したモジュールからのみ参照したい場合に設定します
3)Friend
クラスモジュールでのみ使用できます
1-2-2.関数名
関数の名前を設定します。
1-2-3.引数
省略可能です。呼ばれたときに渡される引数を指定します。複数指定する場合は、コンマで区切ります。
1-2-4.戻り値の型
返される値のデータ型を設定します。Functionプロシージャ内で、戻したい値を関数名に入れます。省略可能です。省略した場合、呼び出し元で戻り値を設定する変数の型に「暗黙の型変換」を行います。変換できない場合は、エラーになります。
2.Subプロシージャとの違いについて
変数を宣言するプロシージャとして、Subプロシージャがあります。Subプロシージャとの違いは、値を戻すかどうかです。
3.Functionプロシージャの使用例
3-1.基本的な使用例
引数で値を渡して、戻した値をメッセージに表示する処理等で使用します。
Sub main() Dim ret As Long ret = sample01(100) MsgBox "値は" & ret End Sub '引数valの値を2倍にして戻します Function sample01(val As Long) As Long '戻り値を設定 sample01 = val * 2 End Function
実行結果:
3-2.特殊な書き方をする場合
Functionプロシージャの暗黙の型変換。sample02は戻り値の型を指定していないので、数字としての「200」を戻しています。samplw03は戻り値の型を指定していないので、は文字列としての「200」を戻しています。
Sub main() Dim ret As String ret = sample02 MsgBox "sample02の戻り値は" & ret ret = sample03 MsgBox "sample03の戻り値は" & ret End Sub '数字の200を返します Function sample02() 'プロシージャの戻り値定義なし sample02 = 200 End Function '文字列の200を返します Function sample03() 'プロシージャの戻り値定義なし sample03 = "200" End Function
実行結果:
3-3.その他の使用例
3-3-1.処理の途中で抜ける
処理の途中でFunctionプロシージャを終了させたい場合は、終了させたい場所に「exit Function」を入れます。
Sub main() Dim ret As String ret = sample04(200) MsgBox "戻り値は" & ret End Sub Function sample04(val As Long) If val > 100 Then sample04 = val Exit Function End If MsgBox "引数は100超" val = val - 50 sample04 = val Exit Function End Function
実行結果:
3-3-2.処理の結果を複数戻したい場合
戻り値を複数戻したい場合は、引数で「ByRef」を使用します。
Sub main() Dim ret1 As String Dim ret2 As String ret1 = sample05("私", 30, "会社員", ret2) MsgBox ret1 & vbCrLf & ret2 End Sub Function sample05(str1 As String, val As Long, str2 As String, ByRef ret As String) As String sample05 = str1 & "の年齢は" & val & "歳です" ret = str1 & "の職業は" & str2 & "です" End Function
実行結果:
4.最後に
Functionプロシージャは、Java等のプログラミング言語のように、引数を返すことができます。Subプロシージャと使い分けてVBAを作成していってください。
コメント