\Excelショートカット集もらえる/
【Excel VBA】繰り返し処理を解説!For Next文とDo Loop文の使い方教えます
繰り返し処理はプログラミングにおいて最も重要な要素の1つです。
今回はExcel VBAの繰り返し処理についてご紹介します。
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の結果
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の結果
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 繰り返しの条件
’繰り返したい処理
・・・
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の実行結果
続いて、A列に下図のように数字を入力してDo While Loopサンプルコード2を実行してみましょう。
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実行結果
Do Until Loopを用いた繰り返し処理
Do Until Loopについて説明します。Do UntilとLoopの間に置かれたコードは、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サンプルコード実行結果
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実行結果
ステップ処理サンプルコード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実行結果
まとめ
VBAにおける繰り返し処理、For Next文とDo Loop文を紹介しました。繰り返し処理はプログラミングにおいて、必ずと言ってよいほど使用するのでぜひマスターしましょう!
「繰り返し処理だけでなくもっとVBAを学びたい!」
「書籍でVBA学習をしていたが挫折した・・・」
そんな方にはユースフルの公式LINEがオススメです!元伊藤忠商事経理でExcel実務のプロ、長内孝平(おさ)が運営しており
- VBAを含むExcel無料講義動画480分
- ExcelPro講座VBAコースにも使える!講座割引クーポン
などLINE会員限定の豪華4大特典を無料でプレゼント中です!ぜひコチラ↓の画像をタップして受け取ってくださいね!