MENU

【初心者向け】VBAでネスト(入れ子)の繰り返し処理を書く方法と注意点

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

このコードを実行すると、以下のように連番がセルに入ります。

ABC
123
456

よくあるミスと防ぎ方

❌ インデントしないと可読性が地獄に…

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

外側と内側で変数名を分ける(例:ijなど)

応用:条件付きで内側ループをスキップ

IfContinue For(※VBAには無いので GoToExit 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段までに抑えるのが理想

関連記事リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次