引数を効率的に渡す
特に指定しない限り、すべての引数は参照によってプロシージャに渡されます。 これは、参照によって渡されるすべての引数が渡されるまでに同じ時間と、引数の データ型に関係なくプロシージャ内の同じ量の領域 (4 バイト) を要するため、効率的です。
値渡しで引数を渡すには、プロシージャの宣言に ByVal キーワードを含めます。 値によって渡される引数は、引数のデータ型に応じて、プロシージャ内で 2 から 16 バイトを消費します。 受け渡しにかかる時間も、大きなデータ型では小さなデータ型に比べていくらか長くなります。 そのため、 String データ型と Variant データ型は、通常は値渡しで渡さないようにしてください。
値渡しで引数を渡すと、元の変数がコピーされます。 そのため、プロシージャ内で引数を変更しても、元の変数には反映されません。 以下に例を示します。
Function Factorial(ByVal MyVar As Integer) ' Function declaration.
MyVar = MyVar - 1
If MyVar = 0 Then
Factorial = 1
Exit Function
End If
Factorial = Factorial(MyVar) * (MyVar + 1)
End Function
' Call Factorial with a variable N.
Sub Test()
N = 5
Debug.Print Factorial(N) ' Displays 120 (the factorial of 5)
Debug.Print N ' Displays 5.
End Sub
関数宣言に ByVal を含めなければ、前の Print ステートメントには 1 と 0 が表示されます。 これは、 MyVar
変数 S
を参照するためです。これは、0 になるまで 1 ずつ減らされます。
ByVal は引数のコピーを作成するため、バリアントを Factorial 関数に渡すことができます。 引数を宣言するプロシージャが別のデータ型である場合、参照渡しで variant を渡すことはできません。
関連項目
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。