Excel VBAを学習していると、ある段階で必ず
「パラメータと引数って何が違うの?」
という疑問にぶつかります。
特に、
- SubやFunctionを分け始めたとき
- 別のプロシージャを呼び出すようになったとき
- エラーが出たが意味が分からないとき
このタイミングで混乱する人が非常に多いです。
多くの初心者の方は、
「どちらも値を渡しているだけでは?」
「正直、同じ意味では?」
と感じるかもしれません。
しかし、パラメータと引数の違いを曖昧なままにしていると、
- コードが読めなくなる
- 他人のVBAが理解できない
- バグの原因が分からない
- 設計がぐちゃぐちゃになる
といった問題に必ず直面します。
この記事では、Excel VBA初心者の方を対象に、
パラメータと引数の違いを「言葉・コード・実務設計」の3方向から徹底的に解説します。
最後まで読むことで、「なんとなく分かった」ではなく、
自分で説明できるレベルまで理解できる構成になっています。
目次
- ✅ そもそもパラメータと引数はなぜ混乱しやすいのか
- ・同じ「値を渡す」ように見える
- ・用語が日常語とかけ離れている
- ✅ パラメータと引数の違いを一言で言うと
- ・文章で言い換えると
- ✅ パラメータとは何かを正しく理解する
- ・パラメータの定義
- ・パラメータは宣言部分に書く
- ・パラメータの役割
- ✅ 引数とは何かを正しく理解する
- ・引数の定義
- ・引数は呼び出し側に書く
- ・引数は「実データ」
- ✅ コードで見るパラメータと引数の対応関係
- ✅ なぜパラメータが必要なのか
- ・パラメータを使うメリット
- ✅ 複数のパラメータを使う場合
- ・複数パラメータの例
- ・呼び出し側
- ✅ パラメータの型指定が重要な理由
- ・型指定するメリット
- ✅ ByValとByRefが理解を難しくする理由
- ・ByValとは
- ・ByRefとは
- ・なぜ初心者が混乱するのか
- ✅ Functionの場合のパラメータと引数
- ✅ よくある初心者の勘違い
- ・引数とパラメータを同じ名前にしないといけない?
- ・引数は変数でなければいけない?
- ✅ 実務での正しい設計イメージ
- ・設計の基本
- ✅ パラメータと引数を理解すると何が変わるか
- ✅ まとめ:パラメータと引数の違いは「立場」
✅ そもそもパラメータと引数はなぜ混乱しやすいのか
この2つの言葉は、混乱して当然です。
なぜなら、見た目が非常によく似ているからです。
さらに、初心者向けの解説では曖昧に説明されがちです。
まずは「なぜ混乱するのか」を整理しましょう。
ここを理解すると、その後の説明が一気にクリアになります。
・同じ「値を渡す」ように見える
次のようなコードを見たとき、多くの人は区別がつきません。
Call SampleProc(10)
Sub SampleProc(num As Long)
End Sub
どちらも「10」を扱っているように見えますが、
役割はまったく異なります。
・用語が日常語とかけ離れている
「引数」「パラメータ」という言葉自体が、
日常生活ではほとんど使われません。
そのため、イメージが湧きにくいのも原因です。
✅ パラメータと引数の違いを一言で言うと
まずは、結論をシンプルに示します。
- パラメータ:受け取る側の変数
- 引数:渡す側の値
これだけ覚えておくだけでも、理解は一気に進みます。
・文章で言い換えると
- パラメータ
→ 「この処理では、こういう値を受け取ります」 - 引数
→ 「実際にこの値を渡します」
この「立場の違い」がすべてです。
✅ パラメータとは何かを正しく理解する
ここからは、それぞれを個別に深掘りします。
まずは パラメータ です。
ここを曖昧にすると、FunctionやSubが理解できません。
・パラメータの定義
パラメータとは、
SubやFunctionが受け取るために用意している変数
のことです。
・パラメータは宣言部分に書く
次のコードを見てください。
Sub SampleProc(num As Long)
MsgBox num
End Sub
この num As Long が パラメータ です。
・パラメータの役割
- 外部から値を受け取る
- 処理内容を柔軟にする
- 汎用的なプロシージャを作る
つまり、
処理の入口で待ち構えている変数
と考えると分かりやすいです。
✅ 引数とは何かを正しく理解する
次に 引数 です。
パラメータと対になる存在ですが、立場は逆です。
・引数の定義
引数とは、
SubやFunctionを呼び出すときに渡す実際の値
のことです。
・引数は呼び出し側に書く
Call SampleProc(10)
この 10 が 引数 です。
・引数は「実データ」
引数には、
- 数値
- 文字列
- 変数
- 式
など、実際の値が入ります。
✅ コードで見るパラメータと引数の対応関係
ここで、両者を並べて見てみましょう。
Sub SampleProc(num As Long)
MsgBox num
End Sub
Sub Test()
Call SampleProc(10)
End Sub
| 立場 | 内容 |
|---|---|
| パラメータ | num |
| 引数 | 10 |
👉 同じ「10」でも、役割が違う という点が重要です。
✅ なぜパラメータが必要なのか
初心者の方からよく聞く疑問です。
「グローバル変数でよくないですか?」
結論から言うと、
パラメータを使う方が圧倒的に安全です。
・パラメータを使うメリット
- 処理の依存関係が明確になる
- 他の処理に影響しにくい
- テストがしやすい
これは実務では非常に重要なポイントです。
✅ 複数のパラメータを使う場合
実務では、1つだけということはほとんどありません。
・複数パラメータの例
Sub ShowResult(name As String, score As Long)
MsgBox name & "さんの点数は" & score & "点です"
End Sub
・呼び出し側
Call ShowResult("田中", 85)
- パラメータ:name, score
- 引数:"田中", 85
順番が対応している 点が重要です。
✅ パラメータの型指定が重要な理由
VBAでは、型指定が非常に重要です。
Sub SampleProc(num)
End Sub
これでも動きますが、
意図しない動作やエラーの原因になります。
・型指定するメリット
- バグを防げる
- 意図が明確になる
- 他人が読みやすい
実務では、
必ず型を指定する
のが基本です。
✅ ByValとByRefが理解を難しくする理由
ここで、さらに混乱を招く存在が出てきます。
- ByVal
- ByRef
これも、パラメータと密接に関係しています。
・ByValとは
Sub SampleProc(ByVal num As Long)
num = num + 1
End Sub
→ 値のコピーを受け取る
・ByRefとは
Sub SampleProc(ByRef num As Long)
num = num + 1
End Sub
→ 元の変数そのものを操作する
・なぜ初心者が混乱するのか
- パラメータの話
- 参照渡しの話
が同時に出てくるからです。
参考:【VBA】ByVal と ByRef の違い|値渡し・参照渡しの理解を深める完全ガイド
✅ Functionの場合のパラメータと引数
Functionでも考え方は同じです。
Function Add(a As Long, b As Long) As Long
Add = a + b
End Function
result = Add(3, 5)
- パラメータ:a, b
- 引数:3, 5
戻り値があるだけで、考え方は変わりません。
参考:【VBA】標準モジュールの呼び出し方法とは|Sub・Functionの使い分けと実務設計
✅ よくある初心者の勘違い
・引数とパラメータを同じ名前にしないといけない?
→ 不要です
Sub SampleProc(x As Long)
End Sub
Call SampleProc(num)
問題なく動きます。
・引数は変数でなければいけない?
→ 値でもOK
Call SampleProc(100)
✅ 実務での正しい設計イメージ
実務では、
- ユーザーフォーム
- ボタン
- 標準モジュール
など、複数の場所から処理が呼ばれます。
・設計の基本
- フォーム:入力を受け取る
- 処理:標準モジュール
- 値の受け渡し:パラメータ
この分離が、保守性を大きく左右します。
参考:【VBA】標準モジュールの呼び出し方法とは|Sub・Functionの使い分けと実務設計
✅ パラメータと引数を理解すると何が変わるか
理解が進むと、
- コードが短くなる
- 再利用しやすくなる
- バグの原因が見える
ようになります。
参考:【VBA】ユーザーフォームの基本構造と仕組みを初心者向けに徹底解説
✅ まとめ:パラメータと引数の違いは「立場」
- パラメータ:受け取る側
- 引数:渡す側
- 役割が違うだけ
- ByVal / ByRefは次の段階
- 設計力が一気に上がる
パラメータと引数の違いは、
VBAを「書ける」から「設計できる」に変える分岐点です。
ここを理解できれば、
ユーザーフォーム、モジュール分割、関数化など、
すべてが一本につながります。