VBAのGoToで特定の位置へジャンプし、プログラムの制御を変更する方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

GoToの概要

プログラムの実行を特定の位置へジャンプさせる VBAの予約語

GoTo

概要 GoTo ステートメントは、VBAでプログラムの制御を特定のラベル(ラベル:)にジャンプさせるために使用されます。エラーハンドリングや、特定の条件で処理をスキップする場合などに使われます。

わかりやすく説明 プログラムの実行を指定した場所に飛ばす命令。

  • コードの流れを制御するために使用される。
  • エラーハンドリング(On Error GoTo)によく使われる。
  • 過度な使用は可読性を下げるため、慎重に使う。

GoToを使った基本的なジャンプ

以下の例では、GoTo を使って特定の位置へジャンプします。

Sub TestGoTo()
    Dim num As Integer
    num = 10

    If num = 10 Then GoTo SkipProcessing

    MsgBox "このメッセージは表示されません。"

SkipProcessing:
    MsgBox "GoTo によりこの処理が実行されました。"
End Sub

解説:

  • GoTo SkipProcessing: SkipProcessing: へジャンプ。
  • ジャンプ後、MsgBox "このメッセージは表示されません" の部分はスキップされる。

エラーハンドリングでのGoToの使用

エラー発生時に特定の処理へジャンプする方法です。

Sub TestErrorHandling()
    On Error GoTo ErrorHandler ' エラー時に ErrorHandler へジャンプ

    ' ゼロ除算エラーを発生させる
    Dim x As Integer
    x = 10 / 0

    Exit Sub ' エラーハンドリングをスキップするために必要

ErrorHandler:
    MsgBox "エラー発生: " & Err.Description
End Sub

解説:

  • On Error GoTo ErrorHandler: エラー発生時に ErrorHandler: へジャンプ。
  • Exit Sub: エラーがなかった場合にエラーハンドリング部分を実行しないようにする。
  • Err.Description: エラーの内容を取得してメッセージを表示。

Excel VBAでのGoToの活用

以下の例では、特定の条件でExcelのセルの処理をスキップする方法を示します。

Sub ProcessCells()
    Dim i As Integer

    For i = 1 To 10
        If Cells(i, 1).Value = "" Then GoTo SkipCell
        Cells(i, 2).Value = Cells(i, 1).Value * 2
SkipCell:
    Next i
End Sub

解説:

  • セルA列の値が空白なら、B列の処理をスキップする。

GoToの注意事項

  • 過度な使用は避ける: コードの流れが分かりにくくなる。
  • エラーハンドリングには便利: On Error GoTo は一般的に使われる。
  • 代替手段を検討する: 可能ならば If...ElseExit Sub を使用する。

よくある質問

Q: GoTo を多用すると何が問題ですか?
A: コードの可読性が低下し、デバッグが難しくなります。
Q: GoTo の代わりに何を使うべきですか?
A: 条件分岐(If...Else)やループ制御(Exit ForExit Sub)を活用するのが推奨されます。
Q: On Error GoTo は使っても問題ありませんか?
A: はい。エラーハンドリングではよく使われますが、適切に管理することが重要です。

まとめ

  • GoTo はプログラムの制御を特定の位置へジャンプさせる。
  • エラーハンドリング(On Error GoTo)に便利だが、通常の処理では多用しない方が良い。
  • コードの可読性を保つため、可能な限り代替手段(If...ElseExit Sub)を使用する。