Excel VBAの引数の使い方を基礎から理解しよう!ByValとByRefの違いも初心者向けに徹底解説
生徒
「Excel VBAの勉強を始めたんですが、引数って何のことかよく分からなくて……」
先生
「引数は、プロシージャや関数に情報を渡すための仕組みです。VBAではとても重要な考え方ですよ」
生徒
「ByValとかByRefも出てきて、さらに混乱しました」
先生
「では、Excel VBA初心者でも安心して理解できるように、基礎から順番に説明していきましょう」
1. 引数とは何か
Excel VBAにおける引数とは、SubプロシージャやFunctionプロシージャに渡す情報のことです。 とても難しそうに聞こえますが、実はとても身近な考え方です。 例えば、宅配便を送るときに「宛先」や「荷物」を渡しますが、VBAの引数もそれと同じです。 処理に必要な情報を事前に渡すことで、同じ処理でも内容を変えられるようになります。
2. 引数を使わない場合のSub
まずは引数を使わない場合を見てみましょう。 このSubは、実行すると必ず同じメッセージを表示します。 内容を変えたい場合は、コードを書き換える必要があります。
Sub Hello()
MsgBox "こんにちは"
End Sub
こんにちは
3. 引数を使うと何が便利なのか
引数を使うと、処理の中身を変えずに結果だけを変えられます。 同じ箱に違う中身を入れるイメージです。 Excel VBAでは、この仕組みを使うことで、使い回しができるコードを書けるようになります。
Sub Greet(userName As String)
MsgBox userName & "さん、こんにちは"
End Sub
山田さん、こんにちは
4. ByValとは何か
ByValは、「値渡し」と呼ばれる仕組みです。 引数で渡した値のコピーを使って処理を行います。 元の値には影響を与えません。 紙に書いたメモをコピーして渡すようなイメージです。
Sub SampleByVal(ByVal num As Integer)
num = num + 10
MsgBox num
End Sub
5. ByRefとは何か
ByRefは、「参照渡し」と呼ばれます。 元のデータそのものを渡すため、SubやFunctionの中で変更すると、呼び出し元の値も変わります。 同じノートを共有して書き換えるようなイメージです。 VBAでは、ByRefが省略された場合の初期設定になります。
Sub SampleByRef(ByRef num As Integer)
num = num + 10
End Sub
6. ByValとByRefの違いを実際に確認
言葉だけでは分かりにくいので、実際の動きを見てみましょう。 同じ変数を使っても、ByValとByRefでは結果が変わります。 Excel VBA初心者が最初につまずきやすいポイントなので、しっかり確認することが大切です。
Sub CheckDifference()
Dim value As Integer
value = 5
SampleByVal value
MsgBox "ByVal後の値:" & value
SampleByRef value
MsgBox "ByRef後の値:" & value
End Sub
ByVal後の値:5
ByRef後の値:15
7. Functionでも引数は使える
Functionプロシージャでも引数はよく使われます。 計算に必要な値を受け取り、その結果を返します。 Excel VBAで関数を自作するときの基本的な形です。
Function DoubleNumber(ByVal num As Integer) As Integer
DoubleNumber = num * 2
End Function
8. 引数を使うとコードが整理される理由
引数を使うことで、処理を部品のように分けられます。 同じ処理を何度も書く必要がなくなり、修正も一か所で済みます。 Excel VBAのプロシージャ設計では、引数を上手に使うことがとても重要です。 初心者のうちからこの考え方に慣れておくと、後でとても楽になります。