📒

VB基本まとめ~条件分岐・ループ編~

2022/12/11に公開

条件分岐

処理の分岐にはIfステートメント、Select Caseステートメントの他に、三項演算子に当たるIf演算子・IIf関数があります。
IfステートメントとSelect Caseの使い分けですが、特定の値にて複数に分岐をする場合はSelect Caseを、複数の条件を交えて分岐する場合はIfを使用します。

Ifステートメント

If 条件1 Andalso 条件2 Orelse 条件3 Then
    '*** 処理(条件1かつ2に当てはまるか条件3に当てはまる場合)
ElseIf 条件4 And 条件5 Or 条件6 Then
    '*** 処理(条件4かつ5に当てはまるか条件6に当てはまる場合)
Else
    '*** 処理(上記条件に当てはまらない場合)
End If

Select Caseステートメント

Select Case 調べる値
    Case1
        '*** 調べる値 = 値1の場合
    Case2,3,4
        '*** 調べる値が値2,値3,値4のいずれかの場合
    Case5 To7
        '*** 調べる値が値5~値7の場合
    Case Is >8
        '*** 調べる値が値8より大きい場合
    Case9,10 To12, Is >13
        '*** 組み合わせも可能
    Case Else
        '*** 上記のいずれにも当てはまらない場合
End Select

三項演算子(If演算子,IIf関数)

If(条件, Trueの時の値, Falseの時の値)
IIf(条件, Trueの時の値, Falseの時の値)

IfとIIfの違いはIfが条件に当てはまる方のみの値を処理するのに対し、IIfは両方処理される違いがある。

ループ

処理をループする方法として、Forステートメント、ForEachステートメント、Whileステートメント、Doステートメントがあります。
ループを途中で抜けたい場合はExitステートメントを使用することで現在のループを抜けることが出来ます。
また、For・ForEachステートメントはContinueステートメントを使用することで強制的に次のステップに進めることが出来ます。

Forステートメント

For カウンタ = 開始値 To 終了値 Step 増減値
    '*** 処理
    If 途中で抜ける条件 Then
        '*** ループを抜ける
        Exit For
    End If
Next

'*** 逆順や跳び番でループする場合はStepを使用する
For i = 10 To 1 Step -1
    '*** 処理(10から1まで繰り返す)
    If 途中で抜ける条件 Then
        '*** 次のステップに
        Continue For
    End If
Next

For Eachステートメント

For Each 要素 In コレクション
    '*** 処理
Next

For Each num In {1, 2, 3, 4, 5}
    '*** 処理(1,2,3,4,5を順に処理する)
Next

Whileステートメント

While 条件
    '*** 条件を満たしている間ループ
    If 途中で抜ける条件 Then
        '*** ループを抜ける
        Exit While
    End If
End While

Do Loopステートメント

Do While 条件
    '*** 条件を満たしている間ループ(Whileステートメントと同様)
    If 途中で抜ける条件 Then
        '*** ループを抜ける
        Exit Do
    End If
Loop

Do
    '*** 条件を満たしている間ループ(Do Whileと違い一回は通る)
Loop While 条件

Do Until 条件
    '*** 条件を満たすまでループ(Do Whileと逆の条件)
Loop

Do
    '*** 条件を満たすまでループ(Do Untilと違い一回は通る)
Loop Until 条件

入れ子になったループからの脱出

先にふれたようにExitステートメントでループを抜けることが出来ますが、抜けられるのは一番内側のループになります。その為、ネストされたループも合わせて抜けたい場合そのままでは抜けることが出来ません。
ネストされたループから脱出する方法の例をあげますので参考にしてみてください。

'*** 例1:同じ条件やフラグを用いる
For i = 1 To 10
    For j = 1 To 10
        If 抜ける条件 Then
            Exit For
        End If
    Next
    If 抜ける条件1 Then
        Exit For
    End If
Next

'*** 例2:Gotoを使用
For i = 1 To 10
    For j = 1 To 10
        If 抜ける条件 Then
            Goto ExitFor
        End If
    Next
Next
ExitFor:

'*** 例3:大外のループに別のループを用い、そのExitステートメントを使用
Dim i = 1
Do While i <= 10
    For j = 1 To 10
        If 抜ける条件 Then
            Exit Do
        End If
    Next
    i += 1
Loop

'*** 例4:ループ処理を関数化し、関数から抜ける
Sub LoopMethod()
    For i = 1 To 10
        For j = 1 To 10
            If 抜ける条件 Then
                Exit Sub
            End If
        Next
    Next
End Sub

Discussion