この記事を読んでわかること
- VBAのコンパイルエラー「引数は省略できません」の原因と対処法がわかる
- エラーが発生した際の、原因を特定するコツを知れる
- エラーを繰り返さない方法を学べる
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
VBAコンパイルエラー「引数は省略できません」の原因と対処法

このコンパイルエラー「引数は省略できません」は、関数やプロシージャを呼び出す際に、必要な引数を渡していない場合に発生します。
【引数とは?】
引数は「引き渡す数(引き渡す値)」のことで、関数やプロシージャの()内に渡す値を指します。
例えば「Left関数」という「文字列の左から指定の文字数分を取り出す関数」があります。
このLeft関数に引数として「文字列」と「文字数」を渡すことで、「左から文字数分までの文字列」を私たちが受け取ります。
この受け取る値を「返り値(戻り値)」といいます。
日常で例えるなら、魚屋さんにアジの3枚おろしを作ってもらいたい場合は、アジを渡して3枚おろしを受け取ります。
アジが引数、3枚おろしが返り値といったところでしょうか。
この「引数は省略できません」を日常で例えるなら、
ファミレスで注文を聞かれたのに何も言わないようなものでしょうか。
注文は省略できません。

ではもっとわかりやすくするために、具体的な原因と、それに対応する解決法を見ていきましょう。
引数を指定し忘れている
まずは引数を指定し忘れている場合です。
下記のVBAコードを見てください。
Sub test()
Debug.Print Left() ' 引数の指定し忘れ
End Sub前提知識{マクロの基礎・作り方から実行まで}
前提知識{「Debug.Print」で値を表示させる方法}
Left関数の引数を指定し忘れた例です。
通常、Left関数は()内に「文字列」と「文字数」を引数として渡す必要があります。
上記の例ではそれを指定し忘れているためエラーとなります。
正しい例は下記のようなコードです。
Sub test()
Debug.Print Left("Utatane", 3)
End Sub引数を省略できる関数もあるため、()内は空欄で良いと思ってしまいがちです。
しかしながら、関数によってはエラーとなるため、使用する関数の特徴を復習しましょう。
引数の個数が違っている
引数を指定しているのにエラーが発生する場合は、この原因である可能性が高いです。
前項でも少し触れましたが、「Left関数」の引数は「文字列」と「文字数」の2種類を渡す必要があります。
「文字列」だけを渡した場合でもエラーが発生します。
Sub test()
Debug.Print Left("Utatane") ' 第二引数である文字数を渡していない
End Sub使用する関数はいくつ引数が必要なのか、どの引数が省略できるのかを復習しましょう。
初めてのエラーは焦って何をしたらいいのかわからなくなりますが、一旦落ち着いてください。
次項で原因を特定するコツを紹介いたします。
原因を特定するコツ
コンパイルエラーは原因が特定しづらいエラーの1つですが、コツをお教えします。
まず、エラーが発生したら、エラー画面の「OK」ボタンをクリックしましょう。

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

青い部分が関数なら、その関数の使い方に誤りがある可能性があります。
引数の数を含めて、使い方を復習しましょう。
青い部分が呼び出したプロシージャなら、呼び出し先のプロシージャに値を渡す必要があるはずです。
呼び出し先のプログラム内容を再度見返してみてください。
原因と解決法がわかったら、あとはこのエラーを繰り返さないようにしましょう。
プログラミングにエラーはつきものなので、1回2回のミスは許容範囲です。
しかしながら、何度も同じエラーを発生させるのは、成長できていない証です。
次項でエラーを繰り返さないための具体的な方法を紹介いたします。
エラーを繰り返さないために
関数はテンプレからコピペするのが無難です。
Left関数の場合なら、メモ帳などに以下のテンプレを保存しておきます。
Left("文字列", 文字数)使用する場合はこれをコピペすることで、引数の数や種類を思い出すことができます。
初心者が手打ちで記述してしまうと、スペル間違いなどで別のエラーが出てしまう場合があります。
関数やコードに慣れるまではコピペを活用しましょう。
最後に
VBA(Excelマクロ)のコンパイルエラー「引数は省略できません」について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!


