引数を効率的に渡す

指定しない限り、すべての引数は参照によってプロシージャに渡されます。 これは、参照によって渡されるすべての引数が渡されるまでに同じ時間がかかり、引数の データ型に関係なく、プロシージャ内で同じ量の領域 (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 S. 
S = 5 
Print Factorial(S) ' Displays 120 (the factorial of 5) 
Print S ' Displays 5. 

関数宣言に ByVal を含めなければ、前の Print ステートメントには 1 と 0 が表示されます。 これは、 MyVar 変数 Sを参照するためです。これは、0 になるまで 1 ずつ減らされます。

ByVal は引数のコピーを作成するため、バリアントを Factorial 関数に渡すことができます。 引数を宣言するプロシージャが別のデータ型である場合、参照渡しで variant を渡すことはできません。

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。