エクセルを使用していて、同じ処理を効率的に処理したい。
このように悩んでいませんか?
この記事では、VBAのFor文を使った繰り返し処理の基礎から、応用的な使用例までを詳しく解説します。
使用例はすべてコピペするだけで実際に使用できるようにしていますので、初心者でもすぐに実践可能です。
気になる部分だけでもぜひご覧いただければと思います。
この記事を読むだけで、あなたもすぐにVBAのFor関数を使いこなせるようになります!
ぜひご覧ください。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
この記事を読むとできるようになること
この記事を読むことで、次のことができるようになります。
繰り返し処理「For文」とは?
VBAには、さまざまな繰り返し処理があります。
今回はその中でも「For文」について詳しく解説します。
以下に、VBAで使用できる主な繰り返し処理の種類をまとめました。
それぞれの処理には特定の用途があり、シチュエーションに応じて使い分けることで、効率的なコードを作成できます。
繰り返し処理の種類
繰り返し処理の種類 | 説明 |
---|---|
For文 | 事前に決められた回数だけ繰り返し処理を行います。 固定回数のループに適しており、範囲内で連続した処理を行う際に便利です。 |
For Each文 | 配列やコレクション内の各要素に対して順次処理を行います。 全要素にアクセスする場合に便利で、シートのセル範囲や オブジェクトのコレクションに対してよく使用されます。 |
Do While文 | 指定された条件がTrueの間、処理を繰り返します。 条件に基づいてループを制御したい場合に使用され、 繰り返し回数が不定のケースに適しています。 |
Do Until文 | 指定された条件がTrueになるまで処理を繰り返します。 Do While文とは逆の条件で動作し、条件が満たされるまで処理を続けます。 |
While…Wend文 | 指定された条件がTrueである間、処理を繰り返します。 Do While文に似ていますが、よりシンプルなループ処理に使用されます。 |
Do Loop While文 | 処理を少なくとも1回は実行し、その後、指定された条件がTrueで あれば繰り返します。 最初に必ず1回処理が行われる点が特徴です。 |
Do Loop Until文 | 処理を少なくとも1回実行した後、指定された条件がTrue になるまで繰り返します。 条件が満たされるまで必ず1回は処理が行われます。 |
このように、さまざまな繰り返し処理がある中で、「For文」は、VBAにおける繰り返し処理の一つです。
指定した回数だけ繰り返し処理を行いたい場合に使用されます。
For文の基本構文
- カウンタ変数
- ループの回数をカウントする変数です。
- 開始値
- カウンタ変数が初めに設定される値です。
- 終了値
- カウンタ変数が到達しループを終了する値です。
- 増分
- カウンタ変数の増分です。(省略すると1ずつ増加)
この構文を使えば、同じ処理を繰り返し適用することが簡単にできます。
より詳しい情報は、Microsoft公式 – For…Next ステートメントを参照してみてください。
For文を使うにあたっての注意ポイント
For文を使用する際には、いくつか注意点があります。
これを守ることで、ループ処理が期待通りに動作します。
- カウンタの範囲に注意
- For文では、カウンタ変数の開始値と終了値を正しく設定することが重要です。
範囲が正しく設定されていないと、無限ループが発生してしまう可能性があります。
- For文では、カウンタ変数の開始値と終了値を正しく設定することが重要です。
- 配列やセル範囲のインデックス外アクセスに注意
- For文を使って配列やセル範囲を操作する際、インデックス(指定する位置)が範囲外にならないように注意しましょう。
範囲外にアクセスするとエラーが発生するため、特に終了条件の設定には気をつける必要があります。
- For文を使って配列やセル範囲を操作する際、インデックス(指定する位置)が範囲外にならないように注意しましょう。
For文の使用例
以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例をぜひご覧いただき、実際に実行してみてください。
使用例1: 順番にセルに値を入力する
セル範囲「A1」から「A10」に、「1」から「10」までの数値を順に入力する方法を紹介します。
主な使用用途: セルに数値を順に入力する場合や、配列にデータを格納する際に使用します。
Sub InputValues()
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = i
Next i
End Sub
- STEP1変数「i」を宣言
変数「i」を Long型で宣言し、ループのカウントに使用します。
- STEP2Forループを開始
変数「i」の値を「1」から「10」まで繰り返し、ループを開始します。
- STEP3セルに値を入力
ループごとに、セルの「A列」1行目から10行目に対して、ループするカウント「i」を値として入力します。
- STEP4ループ終了
10回のループが完了し、すべての値が入力された時点でループが終了します。
処理結果
このコードで使用している機能
1行ずつ解説
- Sub InputValues()
- この行では、「Subステートメント」を使用して新しいプロシージャ(サブルーチン)を定義しています。
プロシージャ名は「InputValues」で、このサブルーチンが実行されると指定された一連の操作が実行されます。
- この行では、「Subステートメント」を使用して新しいプロシージャ(サブルーチン)を定義しています。
- Dim i As Long
- ここでは、変数「i」を Long 型として宣言しています。
この変数は、後に For ループで使用され、繰り返し処理のカウンタとして働きます。
Long 型は、より大きな整数値を扱うためのデータ型です。
- ここでは、変数「i」を Long 型として宣言しています。
- For i = 1 To 10
- この行では、「Forループ」が開始されます。
変数「i」が「1」から「10」まで増加する範囲でループが繰り返されます。
ループは10回実行され、それぞれのループごとに i の値が「1」ずつ増加します。
- この行では、「Forループ」が開始されます。
- Cells(i, 1).Value = i
- この行では、Cells(i, 1) を使用して、シート上の「i」行目の1列目(A列)のセルを指定しています。
そして、そのセルに変数「i」の値を代入しています。
例えば、1回目のループでは「A1」に「1」が入力され、2回目のループでは「A2」に「2」が入力されるように順番に処理されます。
- この行では、Cells(i, 1) を使用して、シート上の「i」行目の1列目(A列)のセルを指定しています。
- Next i
- この行でサブルーチンが終了します。
ループの処理が完了し、プログラムが次に実行する手順に移行します。
- この行でサブルーチンが終了します。
- End Sub
- この行は、サブルーチン「InputValues」の終わりを示します。
このコードは、セル「A1」から「A10」までに、「1」から「10」までの数値を順に入力する処理を行います。
For ループを使用して、変数「i」の値を各セルに代入しています。
使用例2: ループで「Step」を使い、数値を飛ばして加算する
セル範囲「A1」から「A10」に、2ずつ増加する数値を入力する方法を紹介します。
主な使用用途: 数値やデータを特定の増加幅で入力したい場合に便利です。例えば、偶数や奇数を扱う処理に適しています。
Sub StepValues()
Dim i As Long
For i = 1 To 10 Step 2
Cells(i, 1).Value = i
Next i
End Sub
- STEP1変数「i」を宣言
変数「i」を Long型で宣言し、ループのカウントに使用します。
- STEP2Forループを開始
変数「i」を「1」から「10」まで、「2」ずつ増加させながらループを実行します。(Step 2 により1, 3, 5, 7, 9と進行します)
- STEP3セルに値を入力
ループごとに、セルの「A列」の奇数行(A1, A3, A5, A7, A9)に、その行番号に対応する数値を入力します。
- STEP4ループ終了
変数「i」が「10」を超えた時点で、ループが終了し、値の入力が完了します。
処理結果
このコードで使用している機能
1行ずつ解説
- Sub StepValues()
- この行は、新しいサブルーチン「StepValues」を定義しています。
Subステートメントは、VBAで一連の操作をグループ化し、名前を付けて実行可能な処理を作成します。
- この行は、新しいサブルーチン「StepValues」を定義しています。
- Dim i As Long
- ここでは、変数「i」を Long 型として宣言しています。
この変数は、後に For ループで使用され、繰り返し処理のカウンタとして働きます。
Long 型は、より大きな整数値を扱うためのデータ型です。
- ここでは、変数「i」を Long 型として宣言しています。
- For i = 1 To 10
- この行では、「Forループ」を定義しています。
変数「i」の初期値を「1」、終了値を「10」とし、「Step 2」によって、「i」が「2」ずつ増加するように指定しています。
ループは、「i」が「10」を超えるまで繰り返されます。
最初のループでは i =1
次のループでは i = 3
以降、i = 5, 7, 9 というように進行します。
- この行では、「Forループ」を定義しています。
- Cells(i, 1).Value = i
- この行では、Cells(i, 1) を使用して、シート上の「i」行目の1列目(A列)のセルを指定しています。
そして、そのセルに変数「i」の値を代入しています。
例えば、最初のループではセル「A1」に「1」、次のループではセル「A3」に「3」、「A5」に「5」と順に代入されます。
- この行では、Cells(i, 1) を使用して、シート上の「i」行目の1列目(A列)のセルを指定しています。
- Next i
- この行でサブルーチンが終了します。
ループの処理が完了し、プログラムが次に実行する手順に移行します。
- この行でサブルーチンが終了します。
- End Sub
- この行は、サブルーチン「StepValues」の終わりを示します。
このコードは、セル「A1」から「A9」の奇数行に対して、「1」から「9」までの数値を「2ずつ増加」させながら順に入力する処理を行っています。
使用例3: 逆方向にループを行う
セル範囲「A10」から「A1」に、逆順で数値を入力する方法を紹介します。
主な使用用途: データを逆方向に処理したい場合や、逆順にデータを削除する処理などに使用します。
Sub ReverseInputValues()
Dim i As Long
For i = 10 To 1 Step -1
Cells(i, 1).Value = 11 - i
Next i
End Sub
- STEP1変数「i」を宣言
変数「i」を Long型で宣言し、ループのカウントに使用します。
- STEP2Forループを開始
変数「i」を「10」から「1」まで、「1」ずつ減少させながらループを実行します(Step -1 により逆順に進行)。
- STEP3セルに値を入力
ループごとに、セルの「A列」10行目から1行目に対して、ループするカウント「i」を値として入力します。
- STEP4ループ終了
変数「i」 が「1」を超えた時点で、ループが終了し、値の入力が完了します。
処理結果
このコードで使用している機能
1行ずつ解説
- Sub ReverseInputValues()
- この行では、新しいサブルーチン「ReverseInputValues」を定義しています。
Sub ステートメントを使用して、処理をまとめて命名し、後で実行可能なブロックを作成します。
- この行では、新しいサブルーチン「ReverseInputValues」を定義しています。
- Dim i As Long
- ここでは、変数「i」を Long 型として宣言しています。
この変数は、後に For ループで使用され、繰り返し処理のカウンタとして働きます。
Long 型は、より大きな整数値を扱うためのデータ型です。
- ここでは、変数「i」を Long 型として宣言しています。
- For i = 10 To 1 Step -1
- この行では、Forループを定義しています。
このループでは、変数「i」の初期値を「10」、終了値を「1」とし、「Step -1」により「i」が「1」ずつ減少するように設定されています。
ループは変数「i」が 1 になるまで繰り返されます。
ループの開始時点で「i = 10」から始まり、次の反復で変数「i」は「9」になります。
以降、変数「i」の値は毎回「1」ずつ減少します。
- この行では、Forループを定義しています。
- Cells(i, 1).Value = 11 – i
- この行では、Excelのセルに値を入力しています。
Cells(i, 1) を使って、i 行目の A 列(1列目)のセルを指定しています。
セルには 11 – i の計算結果が入力されます。
例えば、「i = 10」の場合、11 – 10 = 1 なので、セル「A10」に「1」が入力されます。
次に「i = 9」の場合、11 – 9 = 2 なので、セル「A9」に「2」が入力されます。
これを繰り返し、「A1」には「10」が入力されます。
- この行では、Excelのセルに値を入力しています。
- Next i
- この行では、Forループが次の反復に進むように指示します。
変数「i」が「Step -1」によって「1」ずつ減少しながら繰り返され、i = 1 になるまで実行されます。
変数「i」が「1」になった後、ループが終了します。
- この行では、Forループが次の反復に進むように指示します。
- End Sub
- この行は、サブルーチン「StepValues」の終わりを示します。
このコードは、セル「A10」から「A1」に向かって、「1」から「10」までの数値を逆順に入力する処理を行っています。
セル「A10」には「1」、セル「A1」には「10」が入力され、10行に渡って値が逆順に設定されます。
使用例4: ループを強制終了する方法
特定の条件を満たした場合、ループを強制終了する方法を紹介します。
主な使用用途: 特定の条件に達したら処理を中断したい場合に使用します。
Sub BreakLoop()
Dim i As Long
For i = 1 To 10
If i = 5 Then
Exit For
Else
Cells(i, 1).Value = i
End If
Next i
End Sub
- STEP1変数「i」を宣言
変数「i」を Long型で宣言し、ループのカウントに使用します。
- STEP2Forループを開始
変数「i」が「1」から「10」まで増加するようにループを実行します。
- STEP3ループの途中で条件をチェック
変数「i」が「5」になった時点で、Exit For文によりループを強制終了します。
- STEP4セルに値を入力
変数「i」が「5」未満の場合、セルの値に変数「i」の値を入力します。
- STEP5ループ終了
変数「i」が「5」になった時点でループが終了し、それまでに入力された値が確定します。
処理結果
このコードで使用している機能
1行ずつ解説
- Sub BreakLoop()
- この行では、「BreakLoop」という新しいサブルーチンを定義しています。
このサブルーチン内での処理は、特定の条件が満たされた場合にループを途中で終了させるために使用されます。
- この行では、「BreakLoop」という新しいサブルーチンを定義しています。
- Dim i As Long
- ここでは、変数「i」を Long 型として宣言しています。
この変数は、後に For ループで使用され、繰り返し処理のカウンタとして働きます。
Long 型は、より大きな整数値を扱うためのデータ型です。
- ここでは、変数「i」を Long 型として宣言しています。
- For i = 1 To 10
- この行では、「Forループ」が定義されています。
変数「i」 の初期値を「1」、終了値を「10」と設定して、変数「i」 が「1」から「10」まで「1」ずつ増加する間、ループが繰り返されます。
- この行では、「Forループ」が定義されています。
- If i = 5 Then
- この行では、条件分岐が行われています。
変数「i」が「5」と等しい場合、Then に続く処理が実行されます。
- この行では、条件分岐が行われています。
- Exit For
- この行では、If 文が True になった場合に Exit For ステートメントが実行されます。
Exit For は、現在の For ループを途中で強制終了するためのコマンドです。
ここでは、変数「i」が「5」に達した時点でループが終了します。
- この行では、If 文が True になった場合に Exit For ステートメントが実行されます。
- Else
- この行では、If 文の条件が False の場合に実行される処理を示します。
つまり、「i」が「5」ではない場合は、Else に続くコードが実行されます。
- この行では、If 文の条件が False の場合に実行される処理を示します。
- Cells(i, 1).Value = i
- この行では、i 行目の A 列(1列目)のセルに変数「i」の値を入力します。
例えば、i = 1 の場合はセル「A1」に「1」が、i = 2 の場合はセル「A2」に「2」が入力されます。
ただし、i = 5 の場合は Exit For によってループが強制終了されるため、それ以降のセルには値が入力されません。
- この行では、i 行目の A 列(1列目)のセルに変数「i」の値を入力します。
- End If
- この行は、If 文の終了を示します。
ここで If…Else 構文が終了します。
- この行は、If 文の終了を示します。
- Next i
- この行では、For ループの次の反復に進みます。
変数「i」が「1」ずつ増加し、次の値で再びループが実行されます。
変数「i」が「5」になると Exit For によりループが終了します。
- この行では、For ループの次の反復に進みます。
- End Sub
- この行は、サブルーチン「BreakLoop」の終了を示します。
サブルーチン内の処理がすべて完了します。
- この行は、サブルーチン「BreakLoop」の終了を示します。
このコードは、「1」から「10」までの数字をA列に入力する処理を行いますが、途中で「i」が「5」に達した時点でループを強制終了します。
そのため、A列のセル「A1」からセル「A4」には「1」から「4」までの値が入力され、「A5」以降のセルには何も入力されません。
使用例5: 特定の条件になったら、ループを「スキップ」する方法
特定の条件を満たした場合、ループ内の一部の処理をスキップする方法を紹介します。
主な使用用途: 条件に応じて一部の処理を飛ばしたい場合や、特定のデータを除外する処理に便利です。
Sub SkipLoop()
Dim i As Long
For i = 1 To 10
If i = 5 Then
GoTo Continue
Else
Cells(i, 1).Value = i
End If
Continue:
Next i
End Sub
- STEP1変数「i」を宣言
変数「i」を Long型で宣言し、ループのカウントに使用します。
- STEP2Forループを開始
変数「i」が「1」から「10」まで増加するようにループを実行します。
- STEP3ループの途中で条件をチェック
変数「i」が「5」になった時点で「GoTo Continue」により、Cells(i, 1).Value = i の処理をスキップして次のループへ進みます。
- STEP4セルに値を入力
変数「i」が「5」以外の場合、該当するセルにその値が入力されます。
- STEP5ループ終了
変数「i」が「10」になった時点でループが終了し、セルに入力された値が確定します。
処理結果
このコードで使用している機能
1行ずつ解説
- Sub SkipLoop()
- この行では、「SkipLoop」という新しいサブルーチンを定義しています。
このサブルーチン内では、特定の条件が満たされた場合に、ループの一部の処理をスキップするためのロジックが実行されます。
- この行では、「SkipLoop」という新しいサブルーチンを定義しています。
- Dim i As Long
- ここでは、変数「i」を Long 型として宣言しています。
この変数は、後に For ループで使用され、繰り返し処理のカウンタとして働きます。
Long 型は、より大きな整数値を扱うためのデータ型です。
- ここでは、変数「i」を Long 型として宣言しています。
- For i = 1 To 10
- この行では、「Forループ」が定義されています。
変数「i」 の初期値を「1」、終了値を「10」と設定して、変数「i」 が「1」から「10」まで「1」ずつ増加する間、ループが繰り返されます。
- この行では、「Forループ」が定義されています。
- If i = 5 Then
- この行では、条件分岐が行われています。
変数「i」が「5」と等しい場合、Then に続く処理が実行されます。
- この行では、条件分岐が行われています。
- GoTo Continue
- この行では、「GoToステートメント」が使用されています。
変数「i」 が「5」の場合、「GoTo」によってラベル「Continue」まで処理をジャンプし、Cells(i, 1).Value = i の処理をスキップします。
このため、i = 5 のときにはセルに値が入力されません。
- この行では、「GoToステートメント」が使用されています。
- Else
- この行では、If 文の条件が False の場合に実行される処理を示します。
つまり変数「i」が「5」でない場合に実行される処理を示しています。
- この行では、If 文の条件が False の場合に実行される処理を示します。
- Cells(i, 1).Value = i
- この行では、i 行目の A 列(1列目)のセルに変数「i」の値を入力します。
例えば、i = 1 の場合はセル「A1」に「1」が、i = 2 の場合はセル「A2」に「2」が入力されます。
i = 5 の場合は「GoTo Continue」によってスキップされるため、セル「A5」には値が入力されません。
- この行では、i 行目の A 列(1列目)のセルに変数「i」の値を入力します。
- End If
- この行は、If 文の終了を示します。
ここで If…Else 構文が終了します。
- この行は、If 文の終了を示します。
- Continue:
- この行はラベルです。
「GoToステートメント」によってジャンプする先の位置を示します。
i = 5 の場合、このラベルにジャンプし、以降の処理を続行します。
これにより、セル「A5」への値の入力がスキップされます。
- この行はラベルです。
- Next i
- この行では、「Forループ」の次の反復に進みます。
変数「i」が「1」ずつ増加し、次の値で再びループが実行されます。
- この行では、「Forループ」の次の反復に進みます。
- End Sub
- この行は、サブルーチン「SkipLoop」の終了を示します。
このコードは、「1」から「10」までの数字をA列に入力する処理を行いますが、「i」 が「5」 のときだけは処理をスキップし、「A5」には値が入力されません。
「A1」から「A4」には「1」から「4」までの値が、「A6」から「A10」には「6」から「10」までの値が入力されますが、「A5」は空のままになります。
まとめ
VBAのFor文は、Excelの繰り返し処理を効率化するために欠かせないツールです。
この記事を通じて、基本的な使い方から応用的な操作までを理解し、実務で活用できるスキルが身につきます。
ポイントのおさらい
この記事の使用例を実践していくことで、VBAの繰り返し処理ができるようになります。
最初はコードをコピペして実行し、少しずつ自分で書けるようにしていきましょう。