- VBAを使ったマクロを習い始めたんだけど、For文って何?
- マクロでのFor文の使い方・書き方を知りたい
このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。
- For文の概要がわかる
- VBAマクロでのFor文の書き方や使い方を学べる
- VBAマクロでFor文を書く際のコツを知れる
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
For文とは?
「for文」は「繰り返し」を行う処理のことです。
同じようなことを何度も繰り返す処理だと思ってください。
例えばエクセルを使っていて、下記のような作業をすることになったらどうでしょう。
- 1から10000までの行数を書き込む
- 別のシートから値を次々コピーしてくる
- 1行おきにセルを塗りつぶす
想像しただけでもめんどうでウンザリしますよね。
小技を知っていれば早くできるものもありますが、For文のマクロを使えば一瞬で終わります。
では、For文の使い方・書き方を見ていきましょう。
VBAマクロのFor文の使い方・書き方
For 繰り返す回数(i = 始まりの数 To 終わりの数)
繰り返したい処理
Next i
上記がFor文の基本形です。
指定するのは下記の2つです。
- 繰り返す回数
- 繰り返したい処理
あまりピンと来ないと思いますので、具体的なコードをお見せします。
For i = 1 To 5
Range("A" & i).Value = i
Next i
上記のFor文を実行することで、「A1~A5セル」に「1~5」までの連番を書き込むことができます。

では、コードを詳しく見ていきましょう。
セルの書き込みなど、マクロの基礎については、下記記事をご参考ください。
For i = 1 To 5
コードの1行目で「繰り返す回数」を指定します。
Forの後ろの「i」は変数です。
基本的にFor文の中でしか使わないカウント用のため、特に宣言は必要ありません。
変数や宣言については下記記事をご参考ください。
「i = 1」となっていますが、iの初期値(始まりの数)を指定しています。
始まりの数があるということは、終わりの数もあります。
「To」の後ろに終わりの数(5)を書きます
これで「1・2・3・4・5」と、5回繰り返し処理が行われるということになります。
Range("A" & i).Value = i
Next i
コードの2行目でA列の上から順番に書き込み処理を繰り返します。
コードの3行目は、iに1をプラスして2行目に戻るという解釈でOKです。
では、繰り返し1周目~5周目の処理を詳しく見ていきましょう。
▼1周目
コード1行目でiの初期値を1に指定したため、iは1です。
そのため、コード2行目は下記のように変換されます。
「Range(“A1”).Value = 1」(A1セルに1が書き込みされる)
※&でAと1が連結され、A1となります
iに1をプラスして2行目に戻ります(i = 2)
▼2周目
1周目と同様に、2・3行目のコードを変換します。
Range(“A2”).Value = 2(A2セルに2が書き込みされる)
i=3にして2行目へ
▼3周目
Range(“A3”).Value = 3
i=4にして2行目へ
▼4周目
Range(“A4”).Value = 4
i=5にして2行目へ
▼5周目
Range(“A5”).Value = 5
iが終わりの数である5に達したので、繰り返し処理は終了です。
このようにして繰り返し処理が進み、終わりの数に達したら終了します。
お試し用に、マクロの全コードを貼っておきますのでご活用ください。
Sub for文()
For i = 1 To 5
Range("A" & i).value = i
Next i
End Sub
【ちょっとしたコツ1】
Sub for文()
For i = 1 To 5
Range("A" & i).value = i
Next i
End Sub
これまで紹介してきた上記のような書き方でも問題はないのですが、For文がどこから始まってどこで終わるのかわかりにくいですよね。
そんなときは、7行目の「Range~」の先頭にカーソルを置いて、「TAB」キーを押します。

そうすることで、下記のように字下げが行われ、Forの始まりや終わり、処理内容がわかりやすくなります。

【ちょっとしたコツ2】
マクロの実行ボタンを押すと、終了まで一気にマクロが実行されますが、どの行でどのような処理が行われているのか、確認したいときもあるかと思います。
そこで、1行ずつマクロを実行させることができます。
「F8キー」を押すか、「デバッグ」→「ステップイン」をクリックしてください。

下図のとおり、実行された行が黄色くなります。

さらに「F8」キーを押すごとに、1行ずつ進んでいきます。

これで、For文がどのように進行されているのかを確認することができます。
途中でやめたくなったら、「■ボタン(リセットボタン)」を押してください。

以上がVBAを使ったマクロでのFor文です。
しかしながら、1行おきに処理をしたい場合もあるかと思います。
そんなときは「Step」を使います。
Step(処理をスキップ)
For i = 1 To 10 Step 2
Range("A" & i).value = i
Next i
上記コードを実行することで、1行おきに繰り返し処理をすることができます。
前項と比べて、コードの1行目の最後に「Step 2」が追加されただけです。

「Step 3」にすることで、2行おきに処理をすることもできます。

途中でFor文を終了させることもできます(Exitを使用)
Exit(途中でForを終了)
For i = 1 To 10
Range("A" & i).value = i
If i = 5 Then Exit For
Next i
上記コードを実行することで、A1~A5まで連番が書き込みされます。

コードの2行目がなければA10セルまで続くのですが、2行目にExitが入っているため、5周目でFor文が終了します。
▼1周目
書き込み処理
i = 1なのでExitは適用されない
i = 2にして2行目へ
▼2周目~4周目
書き込み処理
いずれもi = 5ではないのでExitは適用されない
▼5周目
書き込み処理
i = 5なのでExitが適用され、For文が終了
では、コードの2行目と3行目を入れ替えてみましょう。
For i = 1 To 10
If i = 5 Then Exit For
Range("A" & i).value = i
Next i

今度は「4」で止まりました。
書き込み処理をする前にExitの判定がされているからです。
(書き込み処理が行われずにFor文が終了)
このように、コードの順序によっては処理内容が変わってくるため注意が必要です。
以上でVBAマクロのFor文解説を終わります。
しかしながら、For文を使う際に気を付けなければならないことがあります。
それが「無限ループ」です。
無限ループに注意(回避する方法)
下記コードは「Step」を使用して繰り返し処理を作成した例です。
※悪い例ですので、絶対にマネしないでください
For i = 1 To 10 Step -1
Range("A" & i).value = i
Next i
「Step」の指定が「-1」になってしまっています。
これを実行してしまうと、「無限ループ」に陥ってクラッシュしてしまう場合があります。
繰り返し回数を指定する場合は注意が必要です。
もうひとつ例をお見せします。
For i = 1 To 10
Range("A" & i).value = i
i = 1
Next i
上記コードでは、2周目が延々と繰り返されてしまいます。
(1周目は正常終了→2周目の最後でi=1、Next iでi=2→もう一度2周目開始)
2つ目の例は、やってしまう可能性があるミスです。
For文の作成はくれぐれも慎重に行ってください。
無限ループを回避するには、前項で紹介したF8キーのステップインを使って1行ずつ実行するのが有効です。
For文のテスト実行をする際は、まず1行ずつ実行するようにしてください。
最後に
VBAマクロのFor文について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!