【Excel VBA】繰り返し処理(For~Next,Do~Loop)の使い方

VBA

今回はExcel VBAの繰り返し処理について紹介します。

For ~ Next

指定した要素までループする方法です。

Sub test()
    Dim i As Integer
    '1~10までループする    
    For i = 1 To 10
        Sheet1.Cells(i, 1).Value = i
    Next i
End Sub

Stepを指定することでインクリメントする増減数を指定できます。デフォルトは+1です。

Sub test()
    Dim i As Integer
    '10~1までループする    
    For i = 10 To 1 Step -1
        Sheet1.Cells(i, 1).Value = i
    Next i
End Sub

途中でループを中断したい場合はExit For を指定します。

Sub test()
    Dim i As Integer
    '1~10までループする    
    For i = 1 To 10
        Sheet1.Cells(i, 1).Value = i
        If i > 4 Then
            Exit For
        End If
    Next i
End Sub

For Each ~ Next

配列をループしたい場合はFor Each ~ Next が利用できます。

Sub test()
    Dim cell As Range
    'A1~A10までのセルをループする    
    For Each cell In Sheet1.Range("A1:A10")
        cell.Value = 1
    Next
End Sub

Do While ~ Loop

指定した条件を満たしている間ループする方法です。条件にAND/ORを含むことができるためFor ~ Nextよりも利用できる幅は広いです。ただし条件を抜ける処理がないと無限ループになってしまうので注意が必要です。

Sub test()
    Dim i As Integer
    '1~10までループする  
    i = 1
    Do While i < 11
        Sheet1.Cells(i, 1).Value = i
        i = i + 1
    Loop
End Sub

同じ繰り返しで以下のような書き方あります。特に理由はありませんが私はこちらを使用することが多いです。

Sub test()
    Dim i As Integer
    '1~10までループする  
    i = 1
    While i < 11
        Sheet1.Cells(i, 1).Value = i
        i = i + 1
    Wend
End Sub

ループの終了条件を後ろに書くと、処理をした後に終了判定を行うことになりループ内の処理を必ず1回実行するようになります。

Sub test()
    Dim i As Integer
    '1~10までループする  
    i = 1
    Do
        Sheet1.Cells(i, 1).Value = i
        i = i + 1
    Loop While i < 11
End Sub

途中でループを中断したい場合はExit Do を指定します。

Sub test()
    Dim i As Integer
    '1~10までループする  
    i = 1
    Do While i < 11
        Sheet1.Cells(i, 1).Value = i
        If i > 4 Then
            Exit Do
        End If
        i = i + 1
    Loop
End Sub

Do Until ~ Loop

指定した条件を満たすまでループする方法です。 Do While ~ Loopとは条件の意味合いが逆になるだけで使い方は基本的に同じです。

Sub test()
    Dim i As Integer
    '1~10までループする  
    i = 1
    Do Until i > 10
        Sheet1.Cells(i, 1).Value = i
        i = i + 1
    Loop
End Sub

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です