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個とかにすると読みづらいだけなので注意しましょう。



コメント