忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBAスタンダード対策】値を呼び出し元へ届ける「Functionの戻り値」を攻略!

Functionプロシージャの最大の特徴は、計算や加工の結果を「戻り値(返り値)」として呼び出し元に渡せることです。VBAでは、他の言語のような Return キーワードではなく、独自の代入構造を持っています。

1. 問題:戻り値を設定する正確な構文

【 問題 】 引数で受け取った数値 num を2倍にして呼び出し元に返す、Functionプロシージャ「DoubleValue」を作成したい。空欄 ( A ) に入る正確なコードはどれでしょうか?

Function DoubleValue(num As Integer) As Integer
    ( A ) = num * 2
End Function

① Return
② DoubleValue
③ Result
④ Value

2. 正解:戻り値の代入構造に関する正解

正解: ② DoubleValue

3. 解説:なぜ「プロシージャ名」に代入するのか?

VBAのFunctionプロシージャは、宣言した**「プロシージャ名と同名の変数」**が自動的に用意されるような構造になっています。その名前に値を代入することで、End Function に到達したとき、その値が呼び出し元へと持ち帰られます。

[ Functionの戻り値構造図 ]

Sub Main()
  ans = DoubleValue(5)  ← (2) 10を受け取る
End Sub

         ↓ 呼び出し

Function DoubleValue(num)
  DoubleValue = num * 2  ← (1) 自分自身の名前に値を詰める
End Function

[ 他の選択肢が誤りである理由 ]
① Return:Javaなどの他言語で使われる構文であり、VBAではこの構造をサポートしていません。
③・④:これらはただの変数名とみなされます。プロシージャ名と一致しない名前に代入しても、戻り値としては機能しません。

1. ここが試験に出る!: スタンダード試験の穴埋め問題では、この「プロシージャ名をもう一度書く」という構造が正しく理解できているかが問われます。また、宣言の最後にある As Integer(戻り値の型指定)と、実際に代入する値の型が一致しているかどうかも、構造的な正確性を測るポイントとなります。
2. エンジニアの視点: Java 17などの return 文に慣れていると、名前に代入する構造は少し特殊に感じますが、これは古き良きBASIC言語の伝統的な構造です。値を代入した後も、End Function に行くまでは処理を続行できるという特徴がありますが、混乱を避けるために代入後は速やかに終了させるのが「理系NEO」な綺麗な書き方です。


4. まとめ

「Functionは、自分の名前を箱にして値を持ち帰る」。この一風変わった代入構造こそが、VBA関数におけるデータの出口です。減数分裂が正しい情報をセットにして次世代へ運ぶように、VBAも Function 名という器に正確な値を収めることで、プログラム間の完璧なデータリレーを実現するのです。


PR