VBA Functionプロシージャについて ~関数の解説と使用例~

VBA Functionプロシージャについて ~関数の解説と使用例~

ENGINEER.CLUB編集部

ENGINEER.CLUB編集部

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を作成していってください。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中