
「えっ…Forの中にもう一つFor?
なんか見た目ややこしいし、これ絶対ミスるやつでしょ…?」
結論:ネストは“ループの中でさらにループ”する書き方。
表データの操作などにとても便利ですが、インデントと変数名に注意が必要です。
目次
ネスト(入れ子)とは?
ネストとは、「あるループの中に別のループを入れる構造」のことです。
For i = 1 To 3 For j = 1 To 2 Debug.Print "i=" & i & ", j=" & j Next j Next i
このように、「外側のループが1回進むごとに、内側のループが全部まわる」という形になります。
典型的なネストの使い方:表を処理する
✅ 例:2行3列のセルに連番を入力する
Dim i As Integer, j As Integer Dim num As Integer num = 1 For i = 1 To 2 ' 行 For j = 1 To 3 ' 列 Cells(i, j).Value = num num = num + 1 Next j Next i
このコードを実行すると、以下のように連番がセルに入ります。
A | B | C |
---|---|---|
1 | 2 | 3 |
4 | 5 | 6 |
よくあるミスと防ぎ方
❌ インデントしないと可読性が地獄に…
For i = 1 To 3 For j = 1 To 3 Cells(i, j).Value = "○" Next j Next i
➡ インデント(字下げ)を行いましょう。
VBE(Visual Basic Editor)で [Tab] キーを使えば簡単です。
❌ 変数名の使い回し
For i = 1 To 3 For i = 1 To 3 ' ←これ、地味に危険です ' 変数iが上書きされておかしくなります Next i Next i
➡ 外側と内側で変数名を分ける(例:i
とj
など)
応用:条件付きで内側ループをスキップ
If
と Continue For
(※VBAには無いので GoTo
や Exit For
を代用)を使えば、条件によるスキップも可能です。
For i = 1 To 5 For j = 1 To 5 If j = 3 Then Exit For ' jが3ならループを抜ける End If Debug.Print "i=" & i & ", j=" & j Next j Next i
まとめ:ネストを使いこなすコツ
- ネストは「2次元的な処理」に強力(例:行×列の処理)
- インデントと変数名の工夫で可読性を保つ
- ループの深さはなるべく2〜3段までに抑えるのが理想
コメント