サイトについて      連絡先   検索

VBA GoTo 文

はじめに

Excel VBA マクロの GoTo 文を使用して処理を移動する方法を紹介します。

指定したラベルの位置に処理を移動できます。ループを 1 回飛ばしたり、エラー処理に使用できます。

うまく使えば便利なものですが、処理の流れが乱れるため多用は禁物です。

  • 目次
    • GoTo
    • 次のループへ
    • エラーをキャッチする

GoTo

行にラベルを付けて、その位置に処理を移動できます。

ラベル名:のように入力します。その行にラベルを付けられます。

GoTo ラベル名のように入力します。指定したラベルの位置に処理を移動します。同じ関数内のラベルにのみ移動できます。


Sub 実行()

    GoTo Label1          ' Label1 へ処理を飛ばす
    Debug.Print("GoTo") ' この処理は飛ばされる

Label1: ' GoTo でここから処理が始まる
    Debug.Print("Label") 
  
End Sub

関数内にラベルは複数付けられます。処理を上にも下にも移動できます。


Sub 実行()
    
    GoTo Label2
    
Label1:
    Debug.Print("1")
    
    GoTo Label3
    
Label2:
    Debug.Print("2")
    
    GoTo Label1
    
Label3:
    Debug.Print("3")
    
Label4:
    Debug.Print("4")

End Sub ' 2 1 3 4、の順に処理をする

このように GoTo 文は処理の流れを変えるため、コードを追うのが大変になります。多用は禁物で、ルールを決めて必要なときのみ使うようにします。

次のループへ

ループを 1 回飛ばして次のループへ移りたいとき、GoTo 文を使うとできます。Do Loop と For のどちらでも使えます。


Dim i As Integer

For i = 1 To 3
    If i = 2 Then
        GoTo Continue ' Continue: の行へ処理を飛ばす
    End If
    
    ' ここにループ処理
    Debug.Print(i) ' 1 3、i が 2 のときはここを通らない
    
Continue: ' GoTo Continue の後はここから処理が行われる
Next

エラーをキャッチする

On Error GoTo ラベル名のように入力します。エラーが発生したときに、指定したラベルに処理を飛ばします。


Sub 実行()
On Error GoTo Catch ' エラーが発生したら Catch の行へ処理を飛ばす

    Dim i As Integer
    i = "a"  ' エラー発生

    Exit Sub ' 正常に処理が行われたときに Catch: の処理を行わないように、ここで関数を抜ける

Catch:
    ' エラー処理
End Sub
  • 目次
    • GoTo
    • 次のループへ
    • エラーをキャッチする