広告スペース(バナー)
レッスン 17 / 20

関数の引数(ByVal/ByRef)

このレッスンでは、引数の渡し方であるByValとByRefの違いを学びます。「VBA ByVal ByRef 違い」で調べている方向けです。

ByValは値のコピーを渡すため、関数内で変更しても呼び出し元の変数には影響しません。ByRefは変数そのものを渡すため、関数内での変更が呼び出し元にも反映されます。VBAは何も指定しないとデフォルトでByRefになります。

サンプルコードでは、DoubleValue(ByRef num As Long)という関数で、渡した変数の値を関数内で2倍にし、呼び出し元の変数も変わることを確認しています。

初心者がよくつまずくのが、デフォルトがByRefであることに気づかず、意図せず呼び出し元の変数まで変更してしまうバグです。値を変更されたくない引数には、明示的にByValを付ける習慣が安全です。

実際の開発現場では、意図しない副作用を避けるため、多くのコーディング規約で「引数には明示的にByValかByRefかを書く」ことが推奨されています。

📖 お手本コード
✍️ あなたのコード
コードを書いたら「実行する」を押してください

🧪 このサイトではVBA(Excelマクロ)を直接コンパイル・実行できないため、お手本コードと同じ内容を入力できたかをその場で判定します(採点はブラウザ内だけで行われ、どこにも送信されません)。

🎯
ここまでできればゴール達成!
呼び出し元の変数を書き換える処理の仕組みが理解できるようになります。
広告スペース(バナー)
広告スペース(記事内)