【Excel VBA】繰り返し処理を解説!For Next文とDo Loop文の使い方教えます

VBA 繰り返しアイキャッチ

繰り返し処理はプログラミングにおいて最も重要な要素の1つです。

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

目次

For Next文

For Next文は、指定した回数だけ同じ処理を繰り返します。

構文(For Next)

For [変数] = [初期値] To [終了値]

       繰り返したい処理

       ・・・・・

Next [変数]

※Nextの後の変数は省略可能です。

For Next文 サンプルコード1

Sub ForNext1()

Dim i As Integer
For i = 1 To 6
    Cells(i, 1).Value = 100
Next i

End Sub
解説

ForとNextの間の処理が6回実行されます。i = 1の場合、Excel VBAは1行1列目のセル(=A1セル)に値100を入力します。Next iに到達すると、iを1つ増やしてFor文(3行目)にバックします。i = 2では、2行1列目のセル(=A2)に値100を入力する、といった具合です。

注:ForとNextの間は必ずインデント(タブ)しておくとよいでしょう。そうすることで、コードが読みやすくなります。

サンプルコード1の結果

サンプルコード1結果

For Nextを2回使って、入れ子(ネスト)構造にすると、行と列を操作できます。

For Next文 サンプルコード2

Sub ForNext2()

Dim i As Integer, j As Integer

For i = 1 To 6
    For j = 1 To 2
        Cells(i, j).Value = 100
    Next j
Next i

End Sub
解説

i=1、j=1のとき、1行1列目のセルに値100を入力します。Next jに到達すると、jを1つ増やしてFor j文(4行目)にバックします。i=1、j=2の場合、1行2列目のセルに値100を入力します。次に、jが1から2までしかないので、Next jを無視します。Next iに到達すると、iを1だけ増やしてFor i文(3行目)にバックします。i = 2、j = 1の場合、2行目1列目のセルに値100を入力する、といった具合です。

サンプルコード2の結果

サンプルコード2実行結果

For Next文を3つ使用すると、複数のExcelワークシートのセル範囲をループすることができます。

For Next文 サンプルコード3

Sub ForNext3()

Dim c As Integer, i As Integer, j As Integer

For c = 1 To 3
    For i = 1 To 6
        For j = 1 To 2
            Worksheets(c).Cells(i, j).Value = 100
        Next j
    Next i
Next c

End Sub

※シートが3つ以上あるとき

解説

サンプルコード2と比較して変更した点は、For Nextを1つ追加し、Cellsの前にWorksheets(c).を追加して、c = 1の場合は1シート目、c = 2の場合は2シート目、c = 3の場合は3シート目でセル範囲を取得したことのみです。
実行結果はサンプルコード2の結果が3シートにわたって表示されます。

Do While Loop

Excel VBAには、For Nextループの他にも繰り返し処理があります。例えば、Do Whileループです。Do WhileとLoopの間に置かれたコードは、Do Whileの後の部分が真である限り、繰り返されます。

構文(Do While)

Do While 繰り返しの条件

 ’繰り返したい処理
 ・・・

Loop

Do While Loopサンプルコード1

Sub DoWhileLoop1()

Dim i As Integer
i = 1

Do While i < 6
    Cells(i, 1).Value = 20
    i = i + 1
Loop

End Sub
解説

iが6より小さい限り、i行1列のセルに値20を入力し、iを1つ増やします。i = i + 1は、iの現在値に1を足すということです。例えば、i = 1なら、iは1 + 1 = 2になります。その結果、A列に20という値が5回入ることになります(iが6になると止まるので、6回ではない)。

Do While Loopサンプルコード1の実行結果

Do While Loop実行結果

続いて、A列に下図のように数字を入力してDo While Loopサンプルコード2を実行してみましょう。

DoWhile2

Do While Loopサンプルコード2

Sub DoWhileLoop2()

Dim i As Integer
i = 1

Do While Cells(i, 1).Value <> ""
    Cells(i, 2).Value = Cells(i, 1).Value + 10
    i = i + 1
Loop

End Sub
解説

Cells(i, 1).Value が空でない限り(<>は等しくないという意味)、 i 行 2 列のセルに、i 行 1 列のセル内の値より 10 高い値を入力します。iが7になった時点でCells(7, 1).Valueが空であるため、停止します。これは、ワークシートの任意の数の行をループするのに最適な方法です。

Do While Loopサンプルコード2実行結果

DoWhile実行結果2

Do Until Loop

Do Until Loopについて説明します。Do UntilとLoopの間に置かれたコードは、Do Untilの後の部分が真になるまで繰り返されます。

構文(Do Until)

Do Until 繰り返しの条件

  ‘繰り返したい処理

  ・・・

Loop

Do Until Loopサンプルコード

Sub DoUntilLoop()

Dim i As Integer
i = 1

Do Until i > 6
    Cells(i, 1).Value = 20
    i = i + 1
Loop

End Sub
解説

iが6より大きくなるまで、i行1列のセルに値20を入力、iを1ずつ増やします。その結果、値20はA列に6回配置されます(iが7になると停止するので7回ではありません)。

Do Until Loopサンプルコード実行結果

DoUntil実行結果

Step処理

Excel VBAでは、Stepを使用して、ループのカウンタ変数に異なる増分を指定することができます。

ステップ処理サンプルコード1

Sub Step1()

Dim i As Integer

For i = 1 To 6 Step 2
    Cells(i, 1).Value = 100
Next i

End Sub
解説

ForとNextの間のコードは、3回実行されます。i = 1の場合、1行1列(A1)のセルに値100を入力します。Next iに到達すると、iを2つ増やしてFor文(3行目)にバックします。i = 3では、3行1列のセル(A3)に値100を入力する、といった具合です。

ステップ処理サンプルコード1実行結果

Step処理実行結果

ステップ処理サンプルコード2

Sub Step2()

Dim j As Integer

For j = 8 To 3 Step -1
    Cells(6, j).Value = 50
Next j

End Sub
解説

ForとNextの間のコードは、6回実行されます。j = 8の場合、6行8列のセルに値50を入力します。Next jに到達すると、jを1つ減らし、For文にバックします。j = 7の場合、6行7列のセルに値50を入力する、といった具合です。 

ステップ処理サンプルコード2実行結果

Step処理実行結果2

まとめ

VBAにおける繰り返し処理、For Next文とDo Loop文を紹介しました。繰り返し処理はプログラミングにおいて、必ずと言ってよいほど使用するのでぜひマスターしましょう!

「繰り返し処理だけでなくもっとVBAを学びたい!」
「書籍でVBA学習をしていたが挫折した・・・」

という方はぜひユースフルの動画講座「ExcelPro(エクセルプロ)講座」をチェックしてみてください。

ExcelProVBAコースは1日90分、最短2週間でマクロによる業務自動化が徹底的に学べる講座です。Excel ProでVBAを学んで実務に活かしていきましょう!

気に入ったらシェア!
  • URLをコピーしました!
目次