VBAテクニック集 VBA一覧 変数・知識 文法・構文

【VBA】パラメータと引数の違い理解する|初心者が必ずつまずく概念を徹底解説

Excel VBAを学習していると、ある段階で必ず
「パラメータと引数って何が違うの?」
という疑問にぶつかります。

特に、

  • SubやFunctionを分け始めたとき
  • 別のプロシージャを呼び出すようになったとき
  • エラーが出たが意味が分からないとき

このタイミングで混乱する人が非常に多いです。

多くの初心者の方は、
「どちらも値を渡しているだけでは?」
「正直、同じ意味では?」
と感じるかもしれません。

しかし、パラメータと引数の違いを曖昧なままにしていると、

  • コードが読めなくなる
  • 他人のVBAが理解できない
  • バグの原因が分からない
  • 設計がぐちゃぐちゃになる

といった問題に必ず直面します。

この記事では、Excel VBA初心者の方を対象に、
パラメータと引数の違いを「言葉・コード・実務設計」の3方向から徹底的に解説します。
最後まで読むことで、「なんとなく分かった」ではなく、
自分で説明できるレベルまで理解できる構成になっています。

✅ そもそもパラメータと引数はなぜ混乱しやすいのか

この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を「書ける」から「設計できる」に変える分岐点です。

ここを理解できれば、
ユーザーフォーム、モジュール分割、関数化など、
すべてが一本につながります。

参考:【VBA】ユーザーフォームで入力チェックを実装する方法【実務向け】|未入力・型違い・業務ミス

    -VBAテクニック集, VBA一覧, 変数・知識, 文法・構文