A子さん「えっ…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段までに抑えるのが理想

コメント