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

VBA GoTo 文

はじめに

Excel VBA の GoTo 文を使用して指定した行に処理を移動する方法を紹介します。

GoTo 文を使用すると For のループを 1 回飛ばしたり、エラー発生時にエラー処理をしたりできます。

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

GoTo

ラベル名:で先に GoTo の移動先の行の名前を決めます。GoTo ラベル名で指定したラベルの行に処理を飛ばします。ラベルは GoTo の上でも下でもどちらでも関数内であればそこへ移動します。


Sub 実行()
    Dim i As Integer
    i = 2
    
    If i = 1 Then
        GoTo Label1
    End If
    If i = 2 Then
        GoTo Label2 ' Label2: の行へ移動します。
    End If
    If i = 3 Then
        GoTo Label3
    End If
    
Label1:
    Debug.Print ("Label1") ' この処理は飛ばされます。
    
Label2: ' GoTo Label2 の後はここから処理が行われます。
    Debug.Print ("Label2")
    
Label3: ' ラベルはただの名前なのでここから先の処理も行われます。
    Debug.Print ("Label3")

End Sub

GoTo 文は処理の流れを上に戻したり、下に飛ばしたりするためコードを追うのが大変になります。そのため多用は禁物で、ルールを決めないと不具合の原因になるため注意します。

次のループへ

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


Dim i As Integer
For i = 1 To 5
    If i = 3 Then
        GoTo Continue ' Continue: の行へ処理を飛ばします。
    End If
    
    Debug.Print (i) ' i が 3 のときはここは通りません。
    
Continue: ' GoTo Continue の後はここから処理が行われます。
Next

エラーをキャッチする

On Error GoTo ラベル名と書くと、エラーが発生したとき指定した行ラベルまで処理を飛ばします。


On Error GoTo Catch
    Dim i As Integer
    i = 1
    i = "a" ' エラーが発生します。catch: の行まで処理を飛ばします
    i = 2

    Exit Sub ' エラーが発生した時だけ Catch: の処理を行いたいときはここで関数を抜けます。

Catch: ' エラーが発生するとここから処理が行われます。
    Debug.Print(i) ' 1

関連ページ