GoTo コマンド

にメンテナンス済み

GoTo コマンドは、VBA プログラミングにおいて、コード内の特定のポイントへ実行をジャンプさせるために使用される制御ステートメントです。

このページでは、GoTo コマンドの基本的な使い方と、その使用に関する注意点を説明します。

GoTo コマンドの基本的な使い方

GoTo コマンドは、以下のように記述します。


GoTo ラベル名

' 処理をスキップしたい部分

ラベル名:

' ジャンプ先の処理

GoToコマンドはラベル名と併せて使用され、指定したラベルにジャンプします。

ラベル名は、コード内の任意の場所に配置することができますが、通常はコマンドの実行をスキップしたい部分の直後や、特定の条件が満たされたときにジャンプするための目的地として使用されます。

GoToコマンドの注意点

ラベルの命名と配置

ラベルは、コマンドの実行をスキップしたい部分の直後や、特定の条件が満たされたときにジャンプするための目的地として配置します。

ラベル名は英字で始め、英数字とアンダースコアを使用できます(大文字・小文字は区別されません)。VBA の予約語は使用できず、同じプロシージャ内で重複させることもできません。また、ラベルは行の先頭(インデントなし)から記述し、末尾にコロン(:)を付けます。

ジャンプの範囲

GoTo コマンドを使ってジャンプできるのは、同じプロシージャ(サブプロシージャやファンクション)内のラベルに限定されます。 異なるプロシージャやモジュール間でのジャンプは許されていません。

コードの構造と可読性

GoToのような無条件ジャンプは、多くの現代的なプログラミング言語では推奨されていません。

これは、GoToコマンドがプログラムの流れを不透明にし、コードを読みにくくする可能性があるためです。

したがって、コードの可読性や保守性を高めるために、GoTo コマンドの使用は最小限にすることが望ましいです。

コードの流れをコントロールするためのより構造的なアプローチ(例えば、If-Then-Else 文や Select Case 文)を使用することで、 プログラムの明瞭さを保ちながら同様の結果を得ることができます。

エラーハンドリングにおける使用

GoTo コマンドは、エラーハンドリングの文脈でしばしば使用されます。

エラーが発生した場合に指定したエラーハンドラーにジャンプして、エラーに応じた適切な処理を行うことができます。

以下の例では、On Error GoToでエラー発生時にラベルへジャンプし、後始末を行っています。

Sub Sample()
    On Error GoTo ErrorHandler

    Dim result As Long
    result = 10 / 0 ' 実行時エラー(0 で除算)

    Exit Sub ' 正常終了時はエラー処理を通らないように抜ける

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
End Sub

Exit Subを忘れると、正常終了時にもエラー処理が実行されてしまうため注意してください。

GoToコマンドを使用して、VBA で Try Catch Finally を実現する方法については、以下の記事で紹介しています。

VBAにおけるTry-Catch-Finallyの実装
VBAにはTry-Catch-Finally構文がありませんが、On Error GoTo、ラベル、Err.Raiseを組み合わせることで、後処理を実行しながら呼び出し元へエラーを伝達できます。実装時の注意点とサンプルコードを解説します。

まとめ

GoTo コマンドは、コード内の任意のラベルへジャンプできる VBA の制御ステートメントです。主な用途はOn Error GoToによるエラー処理で、それ以外では慎重に使用する必要があります。

プログラムの可読性と保守性を維持するために、GoTo は最後の手段として考慮し、代わりにより構造化されたコントロールフローを優先して使用することを推奨します。

#VBA