投稿日時:

いよいよ、今年も残すところあとわずかとなりました。本年最後のパワーアップコラムとして、今年VBAのセミナーを受講された方の傾向から、是非とも理解していただきたい関数間の連携についてご説明したいと思います。

VBAセミナーを受講される方の半分以上が、初めてプログラミングに触れる方になります。
そして、初めてプログラミングに触れる方の多くが、関数間の連携に戸惑い、難しく感じています。
本コラムでは、具体的なサンプルプログラムを使って、関数間の連携についてご説明します。

プログラムというのは、同じことを実現するために、いろいろな書き方があります。
そこで「1と10を足して結果の11を表示する」動きを実現する、4パターンのサンプルプログラムを準備しました。
この4パターンのプログラムを使って関数間の連携に関するポイントについてご説明しましょう。

◆パターンA
 シンプルなソースコードにしています。以降のソースコードは、このパターンAとの比較にて、ご説明していきます。
 
 ▽Main関数のポイント
  ・変数は戻り値のみ(ret)を準備し、計算対象となる数値は直接書き込んでいます。
  ・CalcProcedureからの戻り値は引数に記載している1と10の足した数字である11になります。
  ・CalcProcedure関数のxに1が代入され、yに10が代入されます。

 ▽CalcProcedure関数のポイント
  ・引数はxとyの2つになります。
  ・計算結果を格納するための変数(result)を準備しています。
  ・計算で使われているxとyは引数のxとyを意味します。

' 呼び出す関数
Sub Main()

    ' 戻り値の格納場所を変数として宣言
    Dim ret As Long
    
    ' 計算する関数を呼び出す
    ret = CalcProcedure(1, 10)
    
    ' 計算結果を表示する
    MsgBox ret
    
End Sub

' xとyを足して結果を返す関数
Function CalcProcedure(x As Long, y As Long) As Long

    ' 計算結果を格納するための変数
    Dim result As Long
    
    ' xとyの足し算を計算する
    result = x + y
    
    ' 計算結果を戻り値にする
    CalcProcedure = result

End Function

◆パターンB
 パターンAと違い、変数を宣言せずにCalcProcedure関数の行数を少なくしました。
 
 ▽CalcProcedure関数のポイント
  ・計算結果を格納する変数を準備せず、計算結果を直接戻り値に設定しています。
  ・計算で使われているxとyは引数のxとyを意味します。

' 呼び出す関数
Sub Main()

    ' 戻り値の格納場所を変数として宣言
    Dim ret As Long
    
    ' 計算する関数を呼び出す
    ret = CalcProcedure(1, 10)
    
    ' 計算結果を表示する
    MsgBox ret
    
End Sub

' xとyを足して結果を返す関数
Function CalcProcedure(x As Long, y As Long) As Long

    ' 計算結果を戻り値にする
    CalcProcedure = x + y

End Function

◆パターンC
 パターンAと違い、変数を宣言せずにMain関数の行数を少なくしました。

 ▽Main関数のポイント
  ・CalcProcedureを呼び出した結果をメッセージボックスで表示しています。
  ・CalcProcedure関数のxに1が代入され、yに10が代入されます。

' 呼び出す関数
Sub Main()

    ' 計算結果を表示する
    MsgBox CalcProcedure(1, 10)
    
End Sub

' xとyを足して結果を返す関数
Function CalcProcedure(x As Long, y As Long) As Long

    ' 計算結果を格納するための変数
    Dim result As Long
    
    ' xとyの足し算を計算する
    result = x + y
    
    ' 計算結果を戻り値にする
    CalcProcedure = result

End Function

◆パターンD
 パターンAと違い、Main関数で利用する値に対し全ての変数を宣言したため、Main関数の行数が増えています。
 
 ▽Main関数のポイント
  ・Main関数で宣言されているinputX、inputYはCalcProcedureのx、yに代入されます。

' 呼び出す関数
Sub Main()

    ' 戻り値の格納場所を変数として宣言
    Dim ret As Long
    Dim inputX As Long
    Dim inputY As Long
    
    ' 値の設定
    inputX = 1
    inputY = 10
    
    ' 計算する関数を呼び出す
    ret = CalcProcedure(inputX, inputY)
    
    ' 計算結果を表示する
    MsgBox ret
    
End Sub

' xとyを足して結果を返す関数
Function CalcProcedure(x As Long, y As Long) As Long

    ' 計算結果を格納するための変数
    Dim result As Long
    
    ' xとyの足し算を計算する
    result = x + y
    
    ' 計算結果を戻り値にする
    CalcProcedure = result

End Function

いかがでしたでしょうか。関数間のつながりについて、イメージが持てましたでしょうか。1つのソースコードをじっくりと説明する方法ではなく、いろいろな角度から同じ実行結果になるようなサンプルプログラムをご紹介することで、理解を深めてもらう手法にてご説明いたしました。

本コラムが、読者の皆さんの日々の業務に役立てば幸いです。

(担当:小口 真己