【VBA】「コンパイルエラー 修正候補: =」の原因と対処法|Callを使うべきタイミングとは?

Access VBAで開発を進めていると、突然表示される「コンパイルエラー 修正候補: =」というメッセージに戸惑ったことはありませんか?
一見するとシンプルなエラーに見えますが、原因がわからないまま対処に時間を取られてしまうことも多い、意外と厄介なエラーです。

このエラーは、特定の条件で関数を呼び出す際に構文ルールに違反している場合に発生します。特に、引数が複数ある関数を呼び出すときに「Call」を付けていないことが原因であるケースが多く見られます。

本記事では、そんな「修正候補: =」のエラーが起きる具体的な理由と、Callを使うべき正しい書き方・タイミングについて、サンプルコード付きでわかりやすく解説していきます。


■ 結論:複数引数の関数呼び出し時は Call が必要

Access VBAでは、関数(Function)を呼び出す際に、引数が2つ以上あるときは Call を使わないと「コンパイルエラー」になる場合があります。

■ サンプル関数:AAA

以下のような関数が
「AAA」 という名前で
定義されているとします。

Function AAA(name As String, id As Integer)
    '何らかの処理
End Function

■ パターン別の呼び出し方

▼ 引数なし:Call なしでも OK

AAA

または

Call AAA

▼ 引数1つ:Call なしでも OK

AAA("顧客テーブル")

または

Call AAA("顧客テーブル")

▼ 引数2つ以上:Call 必須!

Call AAA("顧客テーブル", 1) '← 正しい
AAA("顧客テーブル", 1) '← エラーになる可能性あり!

■ なぜCallが必要なのか?

VBAでは、関数の戻り値を使わない「副作用目的の呼び出し」には Call を使うのが正式な記述とされています。

特に引数が複数ある場合、戻り値を使わないのに Call を省略すると、VBAが構文を正しく解釈できず構文エラーになることがあります。

■ まとめ:Callの使い分けルール

引数の数 Callなし Callあり エラーの可能性
0個 なし
1個 なし
2個以上 あり

このルールを知っておくだけで、「修正候補: =」エラーに悩まされることは大幅に減ります。
特に関数を多用するフォーム処理やバッチ処理では、Callの使い分けを意識すると安定したコードになります。