VBA
PR

【VBA】ByvalとByRefの違い

works_0327
記事内に商品プロモーションを含む場合があります

 VBAにおいて、プロシージャや関数の引数を渡すときに、「ByVal」と「ByRef」という2つの異なる方法があります。この記事では、それぞれの方法の違いを説明し、どのように使い分けるべきかについて具体例を交えて解説します。
 結論からいうと、両者の違いは次のとおりです。

ByValとByRefの違い
  • Byval:関数やプロシージャ内で引数の値を変更しても、呼び出し元の変数には影響を与えない
  • ByRef:関数やプロシージャ内で引数の値を変更すると、呼び出し元の変数も変更される

 それでは、もう少し詳しく見ていきましょう。

スポンサー

ByVal(バイバリュー)

 ByValは、引数を「値渡し」するためのキーワードです。関数やプロシージャ内で引数の値を変更しても、呼び出し元の変数には影響を与えません。これは、引数がコピーされて関数内で使用されるためです。
 例えば、以下のコードを考えてみましょう:

1Sub ChangeValue(ByVal x As Integer)
2    x = x + 1
3End Sub
4
5Sub Main()
6    Dim num As Integer
7    num = 5
8    ChangeValue num
9    MsgBox num ' 結果は 5
10End Sub

 この場合、ChangeValue プロシージャ内で x の値を変更しても、Main プロシージャ内の num 変数には影響を与えません。(出力結果は、代入した時のまま5になります)

ByRef(バイリファレンス)

 一方、ByRefは引数を「参照渡し」するためのキーワードです。これを使用すると、関数やプロシージャ内で引数の値を変更すると、呼び出し元の変数も変更されます。これは、同じメモリ位置を参照しているためです。
 以下の例を見てみましょう:

1Sub ChangeValue(ByRef x As Integer)
2    x = x + 1
3End Sub
4
5Sub Main()
6    Dim num As Integer
7    num = 5
8    ChangeValue num
9    MsgBox num ' 結果は 6
10End Sub

 この例では、ChangeValue プロシージャが ByRef を使用して呼び出されたため、num の値が変更されています。(出力結果は、ChangeValueで1が加算され6になります)

どちらを選ぶべきか?

 どちらも重要で、具体的な状況に応じて使い分ける必要があります。
 一般的なガイドラインは次の通りです:

ByValとByRefの使い分け
  • ByVal:引数の値を変更する必要がない場合や、元の変数を保護したい場合に使用します。
  • ByRef:引数の値を変更する必要があり変更後の値を呼び出し元で利用する場合に使用します。

まとめ

 いかがだったでしょうか。この記事では、ByValとByRefの違いについて紹介しました。
 これら2つの違いをまとめると、以下のようになります。

Byval

  • 関数やプロシージャ内で引数の値を変更しても、呼び出し元の変数には影響を与えません。
  • 引数の値を変更する必要がない場合や、元の変数を保護したい場合に使用します。

ByRef

  • 関数やプロシージャ内で引数の値を変更すると、呼び出し元の変数も変更されます。
  • 引数の値を変更する必要があり、変更後の値を呼び出し元で利用する場合に使用します。

 ByValとByRefは、VBAで引数を渡す方法の違いを示しています。ByValは値渡しであり、ByRefは参照渡しです。選択肢は状況に応じて使い分けるべきであり、適切な方法を選ぶことでコードの動作を制御できます。適切に使い分けて、プログラミングの幅を広げましょう。

 それでは、バイよ。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


記事URLをコピーしました