【初心者向け】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をコピーしました!

この記事を書いた人

かもろぐ屋へようこそ。

Microsoft製品が大好きな現役社内SEです。
本業では、業務改善・運用・トラブル対応・効率化など、いわゆる「社内の困った」を何でも屋のように対応しています。

このブログでは主に、

VBA
Power Apps
AI

について、実体験ベースで発信しています。

特に最近は、AIを使ったアプリ開発やブログ運営の自動化にハマっています。
「AIがあれば簡単に作れる」と思って始めた結果、普通に壊れたり、詰んだり、課金したりしながら泥臭く進めています。

キラキラした成功談というより、

「実際どうだったのか」
「どこで詰まったのか」
「初心者でも本当にできるのか」

を、できるだけリアルに残すタイプのブログです。

なお、絶賛婚活中です。

コメント

コメントする

CAPTCHA


目次