Excel VBA | For…Next文

VBA
スポンサーリンク

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 変数
VB

3. 奇数だけ取り出す(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 は「何回やるか」が決まっている仕事に最適。まず「数える変数」と「範囲」をはっきりさせると、怖さが消えます。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました