Functionで複数の値を渡したい
VBAでは関数の戻り値はひとつしかないので、複数の戻り値が欲しいとき困りますよね。
ByRefキーワードを利用すれば、いくつかの引数をプロシージャに渡すことができます。
ByVal(値渡し)ではなくByRef(参照渡し)を利用するのは、引数の値を変更したとき参照元に影響を与えるためです。
※複数の値を渡すではなく、返してほしい場合はByRefを使用します。(ByValとByRefの違いはこちら。)
基本の形
Sub/Function name ( 変数名1 As データ型1,変数名2 As データ型2,…)
引数の数だけ変数を宣言し、変数間は上記のようにカンマで区切ってください。
二つの引数を同一セルに入力するサンプルコード
'メインのプロシージャ Public Sub Sample() Dim str1 As String '一つ目の変数を宣言 Dim str2 As String '二つ目の変数を宣言 str1 = "Hello, " str2 = "World!" Call Value(str1, str2) '下記のプロシージャを呼び出す End Sub '呼び出されるプロシージャ Public Function Value(ByRef str1 As String, ByRef str2 As String) '二つのデータをA1セルに入力する Dim words As String words = words & str1 & str2 Range("A1").Value = words End Function
注意点
- コードの可読性が損なわれる場合は、戻り値の配列化等を検討してください。
- 実際に引数を10個とかにすると読みづらいだけなので注意しましょう。
コメント