#20エクセルVBA入門-SubプロシージャからFunctionプロシージャを呼び出す

Excel VBA

今回のFunctionプロシージャの定義です。
便宜上省略可能な戻り値のデータ型は省略して説明します。

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

プロシージャのもう一つの種類、Functionプロシージャを見ていきます。

Subプロシージャとの最大の違いは、呼び出されたときに「戻り値」を返す点です。

前回の呼び出されたSubプロシージャは、「戻り値」を返しませんでした。

SayHiを書き換えます。

Sub を function に書き換えします。

Function SayHi(ByVal name As Variant)

 

Function SayHi(ByVal name As Variant)
    
    Debug.Print "ご無沙汰です、 " & name

End Function

 

すると、自動的にEnd SubがEnd Functionに変わります。

Functionプロシージャが返す「戻り値」をFunctionプロシージャ名と同じSayHiに代入します。

Function SayHi(ByVal name As Variant)

    SayHi = "ご無沙汰です、 " & name

End Function

 

次に、Sub CallTest側でFunction SayHiから帰ってきた「戻り値」をDebug.Printします。

Debug.Print SayHi(name)

 


Sub CallTest()
  
 Dim names As Variant
 
   names = Array("西郷", "勝", "一橋")
 
   Dim name As Variant

  
   For Each name In names
  
     Debug.Print SayHi(name)

   Next name


End Sub

 
Function SayHi(ByVal name As Variant)
 
 SayHi = "ご無沙汰です、 " & name

End Function


問題:Sub 試験・Function 加算・Sub 表示が理解できますか?

Sub 試験()

    Dim 答え As Integer

    答え = 加算(20, 30)

    表示 (答え)
End Sub

Function 加算(ByVal a As Integer, b As Integer)

    加算 = a + b

End Function



Sub 表示(ByVal 答え As Integer)

    Cells(1, 1).Value = 答え

End Sub

 

解答

まず、functionプロシージャ 「加算」を作成します。

Function 加算(ByVal a As Integer, b As Integer)
    加算 = a + b
End Function

加算」では二つの引数a,bを「値渡し」で受け取り、「a+b」の計算をして「戻り値」を「戻し」ます。

Sub プロシージャ 試験 では、Functionプロシージャ 「加算」 を呼び出し引数20と30を渡します。
帰ってきた値を変数 「答え」 に代入します。
Debug.Printで「答え」をイミディエイトウィンドウに表示します。

シートのA1セルに「加算」の計算結果を表示するには
Subプロシージャ「表示」を作成します。

Sub 「試験」のDebug.Printをコメントアウトし、
Sub 「表示」を呼び出します。

その際「答え」を引数として与えるので
表示(答え)と入力してください。()を忘れない事。

コメント