実行時エラー3「Return に対応する GoSub がありません」の原因・解決方法

エラー内容

VBA実行時に、実行時エラー3「Return に対応する GoSub がありません」と表示される。

原因と解決方法

2つの原因と、その解決方法が考えられます。

原因1. Returnから戻るGoSubがない

解説

Returnステートメント実行後は、GoSubステートメントがある場所に処理が戻ります。

なので、Returnに対応するGoSubステートメントがないと、Return実行後にどこに戻ればいいかわからないでこのエラーが発生します。

プログラム修正でGoSubステートメントを間違って削除したり、
他言語の癖でfunctionの最後にReturnを記述した時にやってしまうミスです。

 

解決方法

GoSubステートメントを追加し、GoSubからReturnのある処理を行ラベルで呼び出すように修正します。

また、行ラベルの直前には、Exit SubかExit Functionも必要です。
(理由は、原因2の解説を参考にしてください。)

 

原因2. 行ラベルの前にExit Sub、Exit Functionがない

解説

Returnに対応するGoSubがあっても、Returnの処理が書かれている行ラベルの直前にExit Sub、またはExit Functionがないのが原因です。

Exit Sub、またはExit Functionがないと、すべての処理が終わった後に行ラベル内の処理も実行されてしまいます。

その結果、どこからも呼ばれずにReturnステートメントが実行されてしまい、どこに戻っていいかわからずにこのエラーが発生します。

 

解決方法

行ラベルの直前にExit Sub、またはExit Functionを追加します。

 

まとめ

そもそもGoSubやGotoは、一般的に使うことがNGとされてます。

処理があっちこっちに飛んで、プログラムの可読性が落ちるからです。(あえて使ってもOKとされるのは、エラートラップのプログラム部分のみです。)

なので、できるだけGoSub、Gotoは使わないようにしましょう。

そもそもGoSubやGotoを使わなくても、サブルーチン化すれば大抵のプログラムは実装できます。

なので、サブルーチン化した可読性の高いコーディングにがんばって取り組んでください。

関連記事

VBAエラー原因・解決方法
成果を出す5つのポイント
VBAエラー原因・解決方法
えくとしょ | 初心者のためのエクセルとVBAの図書館
タイトルとURLをコピーしました