Excel VBA の For…Next 文
初心者がまず身につけたい「決まった回数のくり返し」を作る文法が For…Next。手作業で同じことを何度もやる代わりに、パソコンに「何回やるか」を伝える方法です。
基本の形
For 変数 = 初期値 To 最終値
実行したい処理
Next 変数
VB- 変数: 回数を数えるための箱(たいてい i や n を使う)
- 初期値 → 最終値: どこからどこまで数えるか
- 動き: 変数は処理のたびに自動で +1 され、最終値に達したら終わります
まずは手で触ってみる例
1. 1から10まで数えて表示する
Sub Count1to10()
Dim i As Integer
For i = 1 To 10
Debug.Print i '出力ウィンドウに 1,2,...,10 を表示
Next i
End Sub
VB- ねらい: ループの流れを目で確認する
- ポイント: i が 1 → 2 → … → 10 と増える
2. 合計を計算してみる(1~10の合計)
Sub Sum1to10()
Dim i As Integer
Dim total As Integer
total = 0
For i = 1 To 10
total = total + i
Next i
Debug.Print "合計は"; total '55
End Sub
VB- ねらい: 「回数 × 足し算」の定番パターン
- ポイント: ループの中で変数 total に足しこんでいく
Step で進み方を変える
標準では +1 ずつ動きますが、Step を使えば「飛び方」を指定できます。
For 変数 = 初期値 To 最終値 Step 増加量
処理
Next 変数
VB3. 奇数だけ取り出す(Step 2)
Sub OddNumbers()
Dim i As Integer
For i = 1 To 10 Step 2
Debug.Print i '1,3,5,7,9
Next i
End Sub
VB- ねらい: 特定の間隔で処理したいとき
- ポイント: Step 2 なら 1→3→5… と 2 ずつ進む
4. 逆順で数える(Step をマイナスに)
Sub CountDown()
Dim i As Integer
For i = 10 To 1 Step -1
Debug.Print i '10,9,8,...,1
Next i
End Sub
VB- ねらい: 後ろから処理したいとき
- ポイント: 初期値が大きく、最終値が小さいときは Step を負にする
Excel ならではの実用例
5. A1~A10に「No.X」を書き込む
Sub FillLabels()
Dim i As Integer
For i = 1 To 10
Range("A" & i).Value = "No." & i
Next i
End Sub
VB- ねらい: 行番号を使ってセル参照を作る
- ポイント: “A” & i で A1, A2, … を動的に指定
6. B列の合計をとる(B1~B20)
Sub SumColumnB()
Dim i As Integer
Dim total As Double
total = 0
For i = 1 To 20
total = total + Cells(i, "B").Value
Next i
Range("B21").Value = total
End Sub
VB- ねらい: 実データを回して集計する
- ポイント: Cells(行, 列) で柔軟に参照できる
よくつまずくポイントと回避策
- 範囲ミス: 初期値と最終値の関係に合う Step を選ぶ
- 例: 10 から 1 へ下がるなら Step -1 が必須
- 型の選び方: 合計が大きくなる可能性があるなら Integer より Long/Double
- 例: 行数が 32,767 を超えると Integer はオーバーフロー
- ループ内の書き換え: ループ変数 i を手動で変更しない
- 自動で Step 分だけ動くので、手でいじると意図せず飛ぶ
- 無駄な処理: ループ内で同じ計算を繰り返さない
- 変わらない値はループの外で計算しておく
練習問題(自分の手で書いて理解を固める)
- 3の倍数の合計(1~100)
- ヒント: Step は 3、または If 文で i Mod 3 = 0
Sub SumMultiplesOf3()
Dim i As Integer
Dim total As Long
total = 0
For i = 3 To 100 Step 3
total = total + i
Next i
Debug.Print total
End Sub
VB- A1~A12 に月名(Jan~Dec)を書き込む
- ヒント: 配列を使って For で回す
Sub FillMonths()
Dim months As Variant
Dim i As Integer
months = Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
For i = 0 To UBound(months)
Range("A" & (i + 1)).Value = months(i)
Next i
End Sub
VB- 九九の表(1~9)を B2~J10 に作る
Sub MultiplicationTable()
Dim r As Integer, c As Integer
For r = 1 To 9
For c = 1 To 9
Cells(r + 1, c + 1).Value = r * c
Next c
Next r
End Sub
VB覚えておくと楽になるコツ
- 文字列結合: “A” & i の形でセル番地を作ると強い
- Debug.Print: 迷ったら値を出して流れを確認する
- ネスト(入れ子): 2重の For で「行 × 列」みたいな表処理が一気にできる
- 最後に一言: For…Next は「何回やるか」が決まっている仕事に最適。まず「数える変数」と「範囲」をはっきりさせると、怖さが消えます。
