For文は「決まった回数だけ同じ処理を繰り返すための仕組み」
For文は、
「この処理を、何回も、順番に、機械的に繰り返したい」
というときに使う“ループ”の文です。
人間の言葉にすると、
「i を 1 から 10 まで変えながら、同じ処理を10回やってね」
という命令を、コードとして書けるのが For文です。
Excel VBA では特に、
「1行目から10行目まで」「A列からD列まで」
のように“範囲を順番に回る”処理がとても多いので、For文は必須スキルになります。
For文の基本構文と「カウンタ変数」のイメージ
一番シンプルな形
基本形はこうです。
For 変数 = 開始値 To 終了値
' 繰り返したい処理
Next 変数
VB例えば、1から5まで数えるだけの例はこうなります。
Sub SampleForBasic()
Dim i As Long
For i = 1 To 5
MsgBox i
Next i
End Sub
VB動きを言葉で追うと、
- i に 1 が入る
- 中の処理(MsgBox i)が実行される → 1 が表示される
- Next i で i が 1 増えて 2 になる
- まだ終了値(5)以下なので、もう一度中の処理 → 2 が表示される
- これを i = 5 まで繰り返す
- i が 6 になった時点で「5を超えたので終了」
という流れです。
ここでの i は「カウンタ変数」 と呼ばれます。
「今、何回目のループなのか」「今、何行目を処理しているのか」を表す“ループの番号札”だと思ってください。
For文で「行を順番に処理する」典型パターン
1行目から10行目までに同じ値を入れる
Excel VBAらしい例を見てみましょう。
Sub SampleForRows()
Dim i As Long
For i = 1 To 10
Range("A" & i).Value = i
Next i
End Sub
VBこのコードは、
- A1 に 1
- A2 に 2
- A3 に 3
… - A10 に 10
というふうに、A列の1~10行目に連番を入れていきます。
ポイントはここです。
- For i = 1 To 10
→ i が 1,2,3,…,10 と変化しながらループする - Range(“A” & i)
→ i が 1のときは “A1″、2のときは “A2” … というふうに、セル番地が変わる
「カウンタ変数 i を、セル番地の一部として使う」
これが、For文とExcelの相性が抜群にいい理由です。
Step で「増え方」を変える(2ずつ・逆順など)
Step 2 で「2ずつ増やす」
For文は、Step を指定することで「増え方」を変えられます。
For 変数 = 開始値 To 終了値 Step 増分
VB例えば、1,3,5,7,9…と「2ずつ」進めたいときはこうです。
Sub SampleForStep2()
Dim i As Long
For i = 1 To 10 Step 2
MsgBox i
Next i
End Sub
VBこの場合、i は 1 → 3 → 5 → 7 → 9 と変化し、
10 を超えたところでループが終わります。
逆順に回す(Step -1)
行を上からではなく、下から上に向かって処理したいときもあります。
その場合は、Step にマイナスを指定します。
Sub SampleForReverse()
Dim i As Long
For i = 10 To 1 Step -1
MsgBox i
Next i
End Sub
VBi は 10 → 9 → 8 → … → 1 と減っていき、
0 未満になったところで終了します。
逆順ループは、
「削除を伴う処理(下から消したほうが安全)」
などでよく使います。
For文の「開始値」「終了値」「Step」の関係を深掘りする
ループ回数はどう決まるか
例えば、
For i = 1 To 10
Next i
VBこのとき、i は 1~10 までの10回ループします。
回数は単純に「(終了値 − 開始値) ÷ Step + 1」です。
Step を変えるとこうなります。
For i = 1 To 10 Step 2 ' 1,3,5,7,9 → 5回
For i = 0 To 8 Step 2 ' 0,2,4,6,8 → 5回
For i = 10 To 1 Step -1 ' 10,9,8,...,1 → 10回
VB重要なのは、
- 「開始値からスタートして、Step ずつ増減させる」
- 「終了値を超えた(または下回った)時点でループ終了」
というルールです。
終了値に“きっちり届かなくても”問題ない
For i = 1 To 10 Step 3 ' 1,4,7,10 → 4回
VBこの場合、i は 1 → 4 → 7 → 10 と変化します。
10 にちょうど届いているので分かりやすいですが、
For i = 1 To 10 Step 4 ' 1,5,9 → 3回(13には行かない)
VBこの場合は、1 → 5 → 9 までで、次は 13 になってしまうので、
「10を超えるから終了」という扱いになります。
「終了値を“超えたら”終わり」であって、
「必ず終了値に“ぴったり到達する”必要はない」
というのを覚えておくと、Step を使うときの不安が減ります。
For文でよくやる「合計」「カウント」のパターン
1~10の合計を求める
Sub SampleForSum()
Dim i As Long
Dim total As Long
total = 0
For i = 1 To 10
total = total + i
Next i
MsgBox total ' 55
End Sub
VB流れを言葉にすると、
- total を 0 で初期化
- i を 1 から 10 まで動かしながら、total に足していく
- ループが終わったとき、total に 1~10 の合計が入っている
というシンプルなものです。
「ループの中で、何かを少しずつ足していく」
このパターンは、実務でも頻出です。
条件を満たす行だけカウントする
Sub SampleForCount()
Dim i As Long
Dim cnt As Long
cnt = 0
For i = 1 To 100
If Range("A" & i).Value = "完了" Then
cnt = cnt + 1
End If
Next i
MsgBox "完了件数: " & cnt
End Sub
VBここでは、
- 1~100行目を順番に見ていく
- A列が「完了」の行だけカウントを増やす
- 最後に件数を表示する
という処理をしています。
「For で行を回す」+「If で条件判定」+「カウンタを増やす」
この3つの組み合わせは、Excel VBA の“基本中の基本”です。
For文でつまずきやすいポイント
カウンタ変数を Next で書き忘れる/間違える
For i = 1 To 10
' ...
Next ' ← ここに i を書き忘れても動くが、癖としては書いたほうがいい
VBVBAでは、Next のあとに変数名を書かなくても動きますが、
必ず Next i のように書く癖をつけたほうがいいです。
理由はシンプルで、「ネストしたときに読みやすくなるから」です。
For i = 1 To 10
For j = 1 To 5
' ...
Next j
Next i
VBこのように、どの Next がどの For に対応しているかが一目で分かるようになります。
開始値・終了値・Step の関係を間違える
For i = 10 To 1 ' Step を書かないと、デフォルトは +1 なので一度も回らない
Next i
VBこのように、「10から1へ向かいたいのに Step を書き忘れる」と、
ループが一度も実行されません。
逆に、
For i = 1 To 10 Step -1 ' これも一度も回らない
Next i
VBのように、「増やす方向と終了条件の関係」が矛盾していると、
やはりループは実行されません。
「開始値から終了値へ、Step の符号の方向に向かって進んでいく」
というイメージを、頭の中で毎回確認してみてください。
For文を“怖くなくす”ための考え方
「手でやるならどうするか」を先にイメージする
例えば、
「A1~A10 に 1~10 の数字を入れたい」
という作業を、人間が手でやるとしたら、
- まず A1 に 1 を入れる
- 次に A2 に 2 を入れる
- 次に A3 に 3 を入れる
- …
- A10 に 10 を入れる
というふうに、「同じことを、番号だけ変えながら繰り返す」はずです。
For文は、この「番号だけ変えながら同じことを繰り返す」を、
機械にやらせるための文です。
「自分が手でやるならどう繰り返すか?」を先にイメージしてから、
それを For文に落とし込むと、理解が一気に楽になります。
ループの中で「何が毎回変わっているか」を意識する
For文の中で、毎回変わるのは主にカウンタ変数 i です。
その i を、
- セル番地の一部に使う
- 配列のインデックスに使う
- メッセージの内容に使う
など、「どこに差し込んでいるか」を意識して読むと、
ループの動きが頭の中で再生しやすくなります。
まとめ:For文は「規則的な繰り返し」をコードにするための道具
For文の本質は、
- カウンタ変数を
- 一定のルールで増減させながら
- 同じ処理を何度も繰り返す
という仕組みです。
押さえておきたいポイントをコンパクトにまとめると、
For i = 開始値 To 終了値~Next iが基本形- i は「今何回目か」「今何行目か」を表すカウンタ変数
- Step で増え方を変えられる(2ずつ、逆順など)
- 行ループ(Range(“A” & i))との組み合わせがExcel VBAの定番
- 合計・カウント・条件付き処理など、For+If のパターンが超重要

