次の方法で共有


引数を効率的に渡す

指定しない限り、すべての引数は参照によってプロシージャに渡されます。 これは、参照によって渡されるすべての引数が渡されるまでに同じ時間と、引数の データ型に関係なくプロシージャ内の同じ量の領域 (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 のサポートおよびフィードバックを参照してください。