ByRefのとByValの引数の違いは何ですか? | VBAの面接の質問
これは、VBAインタビューで最もよく聞かれる質問の1つです。この記事では、ExcelVBAのByVal引数とByRef引数の違いを学習します。
定義:
ByRef引数:これは、参照による文字通りの短縮形です。引数がByRef引数として別のサブまたは関数に渡されると、実際の変数の参照が送信されます。変数のコピーに加えられた変更は、元の引数に反映されます。
値の代わりに、値の場所が関数へのByRefを使用して関数に送信されると言えます。
これはVBAのデフォルトの引数です。引数の前にByRefを記述する必要はありません。
構文:
Sub x(a as Variant)
‘またはSub x(ByRef a as Variant)
ByVal引数:これは、値による文字通りの短い形式です。引数がByVal引数として別のサブまたは関数に渡されると、引数の値のみが送信されます。元の引数はそのまま残されます。外部関数またはサブで行われた変更は、元の引数に反映されません。
引数をByValとして宣言するには、引数の前にByValキーワードを使用する必要があります。
構文:
Sub x(ByVal a as Variant)
これで定義がわかりました。例を見て、それを乗り越えましょう。
ByRefの例これは簡単なプログラムです。
Sub X(ByRef a As Variant) a = 20 Debug.Print "in sub X value of a = " & a End Sub Sub Y() a = 10 Call X(a) Debug.Print "in sub Y value of a = " & a End Sub
したがって、ここには2つのサブルーチンがあります。最初のサブはXで、ByRefとしてバリアント引数を取ります。 (ByRefキーワードは省略できます。これがデフォルトです。)
次に、a = 20 endの値を設定し、aの値を出力します。
サブYは、サブルーチンXを呼び出すメインサブルーチンです。これは、a = 10の値を設定してから、サブルーチンXを呼び出し、引数としてaを渡します。
次に、Yのaの値を出力します。
Sub Yを実行すると、これが出力になります。
a = 20のサブX値でa = 20のサブY値で
結論:元のaの値はサブXによって変更され、両方のサブで20に設定されます。 Sub Yを実行すると、aの初期値は10であることがわかります。YはX(a)を呼び出します。 Xはa = 20の値を設定します。 「a = 20のサブX値で」を出力します。
コントロールはyに戻り、a = 20のサブY値で出力します。
これはByRef引数の効果です。
ByValの例:
これはByValの例です
Sub X(ByVal a As Variant) a = 20 Debug.Print "in sub X value of a = " & a End Sub Sub Y() a = 10 Call X(a) Debug.Print "in sub Y value of a = " & a End Sub
どちらの例も同じですが、引数の受け渡しが異なります。
ここXでは、引数はByValとして宣言されています。今回Yサブルーチンを実行すると、出力は次のようになります。
a = 20のサブX値a = 10のサブY値
結論:元のaの値はサブXによって変更されません。Xの場合は20、Yの場合は10です。Yがaを使用してXを呼び出すと、aのアドレスではなくaの値のみが送信されます。
したがって、aで行われた変更は、元の変数には反映されません。
テストでは、20に設定する前にXのaの値を出力すると、10が出力されます。byValを使用してXのaに10が渡されるためです。 ByRefを使用して、YのaをXのaに送信しました。
これは簡単な質問ですが、vbaインタビューの質問で、私たちの多くはこれを混乱させます。その理由は、あまり使用できないからです。ほとんどの場合、値を別の変数にコピーします。*そうですね、これがExcelVBAのbwByRef引数とByVal引数の違いです。このトピックまたは他のVBAまたはExcelのトピックについて疑問がある場合は、お知らせください。コメントセクションはすべてあなたのものです。
関連記事:
link:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [MicrosoftExcelのVBAを使用して確認プロンプトなしでシートを削除する]
link:/ files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して新しいブックを追加および保存する]
link:/ menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [ExcelのVBAステータスバーにメッセージを表示する]
link:/ general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して警告メッセージをオフにする]
人気の記事:
link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数]
link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016]
link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法]