If...Then...Else ループ内の For...Next ブロックなど、他の制御ステートメント内に制御ステートメントを配置できます。 別の制御ステートメントに配置された制御ステートメントは、"入れ子にされた" ステートメントと呼ばれます。
入れ子のレベル
Visual Basic のコントロール構造は、必要な数のレベルに入れ子にすることができます。 入れ子になった構造は、それぞれの本体をインデントして読みやすくするのが一般的です。 統合開発環境 (IDE) エディターによって自動的に行われます。
次の例では、プロシージャ sumRows は、行列の各行の正の要素を加算します。
Public Sub sumRows(ByVal a(,) As Double, ByRef r() As Double)
Dim i, j As Integer
For i = 0 To UBound(a, 1)
r(i) = 0
For j = 0 To UBound(a, 2)
If a(i, j) > 0 Then
r(i) = r(i) + a(i, j)
End If
Next j
Next i
End Sub
前の例では、最初の Next ステートメントは内部 For ループを閉じ、最後の Next ステートメントは外側の For ループを閉じます。
同様に、入れ子になった If ステートメントでは、 End If ステートメントは、最も近い If ステートメントに自動的に適用されます。 入れ子になった Do ループも同様の方法で動作し、最も内側の Loop ステートメントが最も内側の Do ステートメントと一致します。
注
多くのコントロール構造では、キーワードをクリックすると、その構造内のすべてのキーワードが強調表示されます。 たとえば、Ifコンストラクションで [If...Then...Else] をクリックすると、コンストラクション内のIf、Then、ElseIf、Else、およびEnd Ifのすべてのインスタンスが強調表示されます。 次または前の強調表示されたキーワードに移動するには、Ctrl + Shift + ↓ キーまたは Ctrl + Shift + ↑ キーを押します。
入れ子にされたさまざまな種類の制御構造
ある種類の制御構造を、別の種類の制御構造の中で入れ子にできます。 次の例では、With ループ内のFor Each ブロックと、If ブロック内の入れ子になったWith ブロックを使用します。
For Each ctl As System.Windows.Forms.Control In Me.Controls
With ctl
.BackColor = System.Drawing.Color.Yellow
.ForeColor = System.Drawing.Color.Black
If .CanFocus Then
.Text = "Colors changed"
If Not .Focus() Then
' Insert code to process failed focus.
End If
End If
End With
Next ctl
コントロール構造の重複
コントロール構造を重ねることはできません。 つまり、入れ子になった構造体は、次の最も内側の構造に完全に含まれている必要があります。 たとえば、内部For ブロックが終了する前にWith ループが終了するため、次の配置は無効です。
Visual Basic コンパイラは、このような重複する制御構造を検出し、コンパイル時エラーを通知します。
こちらも参照ください
.NET