【Excelマクロ】VBAコンパイルエラー「引数の数が一致していません」の原因と対処法

スポンサードリンク
VBA

この記事を読んでわかること

  • VBAのコンパイルエラー「引数の数が一致していません」の原因と対処法がわかる
  • エラーの原因を特定するコツを知れる
  • エラーを繰り返さない方法を学べる

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします

スポンサードリンク

VBAコンパイルエラー「引数の数が一致していません」の原因と対処法

コンパイルエラー引数の数が一致していません
コンパイルエラー引数の数が一致していません

コンパイルエラー「引数の数が一致していません。または不正なプロパティを指定しています」は、
呼び出した関数やサブプロシージャに渡す引数の個数が正しくないときに発生します。

【引数とは?】
引数は「引き渡す数(引き渡す値)」のことで、関数やサブプロシージャの()内に渡す値を指します。
例えば「CStr関数」という「値をString型に変換する関数」があります。
この「CStr関数」の引数として「変換したい変数や値」を渡すことで、「String型に変換された変数や値」を私たちが受け取ります。
この受け取る値を「返り値(戻り値)」といいます。

日常で例えると、魚屋さんにアジの3枚おろしを作ってもらいたい場合は、アジを渡して3枚おろしを受け取ります。
アジが引数、3枚おろしが返り値といったところでしょうか。

下記のVBAコードを見てください。

Sub test()
    Call sample("Daikon", "Ninjin") '←2種類の引数を渡す
End Sub

Sub sample(veg1 As String) '←引数を1種類しか受け取っていない=個数が不一致
    '処理
End Sub

前提知識{マクロの基礎・作り方から実行まで
前提知識{変数の宣言や使い方
前提知識{Callとは?使い方・書き方

「sample」というサブプロシージャを呼び出した例です。
()内の引数には、「Daikon」「Ninjin」という2種類の文字列を渡していますが、
受け取り側は1種類しか受け取っていません。

これにより、個数不一致としてエラーが出ます。

渡す側と受け取り側の引数の個数は一致させるようにしましょう。

Sub test()
    Call sample("Daikon", "Ninjin")
End Sub

Sub sample(veg1 As String, veg2 As String) ' ←2種類の引数を受け取る=エラー解消
    '処理
End Sub
スポンサードリンク

原因を特定するコツ

コンパイルエラーは原因が特定しづらいエラーの1つですが、コツをお教えします。
まず、エラーが発生したら、エラー画面の「OK」ボタンをクリックしましょう。

コンパイルエラー引数の数が一致していません
コンパイルエラー引数の数が一致していません

すると、該当するサブプロシージャが黄色くマーキングされ、原因と思われる箇所が青くなります。

青くなった部分が関数なら、その関数の使い方に誤りがある可能性があります。
引数の個数を含めて、使い方を復習しましょう。

青い部分が呼び出したサブプロシージャや自作の関数なら、呼び出し先のサブプロシージャや関数を確認しましょう。
受け取る引数の個数がいくつなのか、渡す側と同じ個数なのかを見てみてください。

原因と解決法がわかったら、あとはこのエラーを繰り返さないようにしましょう。
プログラミングにエラーはつきものなので、1回2回のミスは許容範囲です。
しかしながら、何度も同じエラーを発生させるのは、成長できていない証です。

次項でエラーを繰り返さないための具体的な方法を紹介いたします。

スポンサードリンク

エラーを繰り返さないために

関数はテンプレからコピペするのが無難です。
例えばLeft関数の場合なら、メモ帳などに以下のテンプレを保存しておきます。

Left("文字列", 文字数)

使用する場合はこれをコピペすることで、引数の個数数や種類を思い出すことができます。

初心者が手打ちで記述してしまうと、スペル間違いなどで別のエラーが出てしまう場合があります。
関数やコードに慣れるまではコピペを活用しましょう。

サブプロシージャや関数を作成した場合は、受け取る引数の個数をコメントで記述しましょう。

Sub test()
    Call sample("Daikon", "Ninjin") ' 野菜を2つ渡す
End Sub

Sub sample(veg1 As String, veg2 As String) ' 野菜を2つ受け取る
    '処理
End Sub

引数の個数は変わることがあるので、その都度更新していきましょう。
少しめんどうですが、エラーが発生して苦しむよりはマシです。

スポンサードリンク

最後に

VBA(Excelマクロ)のコンパイルエラー「引数の数が一致していません」について解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました