GoTo ステートメント

プロシージャ内の指定した行に無条件に分岐します。

構文

GoTo line  

パーツ

line
必須です。 任意の行ラベル。

Remarks

GoTo ステートメントでは、それが存在するプロシージャ内の行にのみ分岐できます。 行には、GoTo で参照できる行ラベルが必要です。 詳細については、「方法:ステートメントへのラベル付け」を参照してください。

注意

GoTo ステートメントによって、コードの読み取りと保守が困難になる場合があります。 可能な限り、代わりに制御構造を使用してください。 詳細については、「 Control Flow」を参照してください。

GoTo ステートメントを使用して、For...NextFor Each...NextSyncLock...End SyncLockTry...Catch...FinallyWith...End With、または Using...End Using コンストラクションの外部から、内部のラベルに分岐することはできません。

分岐と Try コンストラクション

Try...CatchFinally コンストラクション内では、GoTo ステートメントによる分岐に、次のルールが適用されます。

ブロックまたは領域 外部からの分岐 内部からの分岐
Try ブロック 同じコンストラクションの Catch ブロックからのみ 1 コンストラクション全体の外部へのみ
Catch ブロック 許可されない コンストラクション全体の外部、または同じコンストラクションの Try ブロックへのみ 1
Finally ブロック 許可されない 許可されない

1 1 つの Try...Catch...Finally コンストラクションが別のコンストラクション内に入れ子になっている場合、Catch ブロックは自身の入れ子レベルにある Try ブロックに分岐できますが、他の Try ブロックには分岐できません。 入れ子になった Try...Catch...Finally コンストラクションは、それが中で入れ子になっているコンストラクションの Try または Catch ブロックに完全に含まれている必要があります。

次の図は、別のコンストラクション内に入れ子になっている Try コンストラクションを示しています。 2 つのコンストラクションのブロック間のさまざまな分岐は、有効または無効として示されます。

Graphic diagram of branching in Try constructions

次の例では、GoTo ステートメントを使用して、プロシージャ内の行ラベルに分岐します。

    Sub GoToStatementDemo()
        Dim number As Integer = 1
        Dim sampleString As String
        ' Evaluate number and branch to appropriate label.
        If number = 1 Then GoTo Line1 Else GoTo Line2
Line1:
        sampleString = "Number equals 1"
        GoTo LastLine
Line2:
        ' The following statement never gets executed because number = 1.
        sampleString = "Number equals 2"
LastLine:
        ' Write "Number equals 1" in the Debug window.
        Debug.WriteLine(sampleString)
    End Sub

関連項目