TOP

VBA-レッスン 8.1。ループ (Loops)

ループは命令を数回繰り返すため、時間を大幅に節約できます。

Excel VBA には、次のタイプのループが存在します。

  • While ... Wend
  • Do ... Loop
  • For ... To ... Next

  • 次のコードは、列 A (1 から 12) の各セルに一連の数値を挿入します。

    Sub while_loop()
    
        Cells(1, 1) = 1
        Cells(2, 1) = 2
        Cells(3, 1) = 3
        Cells(4, 1) = 4
        Cells(5, 1) = 5
        Cells(6, 1) = 6
        Cells(7, 1) = 7
        Cells(8, 1) = 8
        Cells(9, 1) = 9
        Cells(10, 1) = 10
        Cells(11, 1) = 11
        Cells(12, 1) = 12
    
    End Sub
    

    このコードは非常に繰り返しが多いです...

    12 個のセルではなく、数百個のセルに連続した数値を挿入する必要がある場合を想像してみてください。ループが非常に便利な理由がわかりました。

    WHILE ... WEND

    空のサイクル While の例を示してみましょう。

    Sub while_loop()
    
        While [状態]
            '手順
        Wend
    
    End Sub
    

    条件が true である限り、ループ内のステートメントは実行され続けます (ただし、無限ループを作成しないように注意してください)。

    以下は、以前に説明したループ マクロを While ループに変換したものです。

    Sub while_loop()
    
        Dim num As Integer
        num = 1 '開始番号 (この場合、行番号と設定される値です)
    
        While num <= 12 'num 変数が 12 以下である限り、命令は実行されます。
           Cells(num, 1) = num '番号付け
           num = num + 1 'ループが通過するたびに数値は 1 ずつ増加します
        Wend
           
    End Sub
    

    このループをマクロで使用すると、12 ではなく 400 のテープが必要な場合は、12 を 400 に置き換えるだけで済みます。

    DO ... LOOP

    While Wend と同じように動作するループ (While コマンドに含まれる特定の条件が true である限り実行される) を記述する別の方法もあります。

    Sub do_while_loop()
    
        Do While [状態]
            '手順
        Loop
    
    End Sub
    

    次のバージョンは、Do Loop ループの最後に条件を記述できることを示しています。これは、命令が少なくとも 1 回正確に実行されることを意味します。

    Sub do_while_loop()
    
        Do
            '手順
        Loop While [状態]
    
    End Sub
    

    条件が満たされている間ループする代わりに、While を Until に置き換えれば、条件によってループを終了することもできます。

    Sub do_while_loop()
    
        Do Until [状態]
            '手順
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            '手順
        Next
    
    End Sub
    

    ここで For ループが 5 回繰り返されます。

    このサイクルが繰り返されるたびに、変数 i は自動的に 1 ずつ増加します。

    Sub for_loop()
    
        For i = 1 To 5
            MsgBox i
        Next
    
    End Sub
    

    ループの早期終了 (Exit)

    次の命令を使用すると、For ループを早期に終了できます。

    Exit For 'For ループから抜け出す
    

    これを明確に示す例を考えてみましょう。

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") 'セル A1 で、繰り返し回数の制限を指定しました。
    
        For i = 1 To 7 '予想されるサイクル数: 7
           If i > max_loops Then 'セル A1 が空であるか、7 未満の数値が含まれている場合は、繰り返しの数を減らします。
               Exit For '前の条件が TRUE の場合、ループ For...loop を終了します。
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    その他の Exit 演算子:

    Exit Do 'ループ出口 Do Loop
    
    Exit Sub '手続きを終了する
    
    Exit Function '終了機能