For~Nextは、エクセルVBAのコード組み立ての中で頻繁に利用されます。For~Nextとその入れ子(ネスト)の考え方を最速理解できるようにします。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルVBAのコード組み立てで、非常によく使うステートメントの一つにFor~Nextでのループ処理があります。
今回はこのFor~Nextステートメントの使い方を説明します。
コンテンツ
For~Nextの入れ子ループを最速理解

エクセルVBAコードを組み立てる上で、セルの値を拾いに行ったり、
置きに行ったりするのにFor~Nextのループ処理は基本になります。
実際的には、入れ子(ネスト)構造にして処理を行っていくことが多くなります。
入れ子(ネスト)という複層構造になりますので、組み立てられたコードを見ても「何か複雑!」という印象になるかもしれません。
簡単に理解するためには、順番に組み立て行くところを確認しながら見て行くことが重要です。
一行分だけ(変数を1つ)を使ってFor~Nextの動作を確認する
Excelシートで言うと、一行のみや一列のみ(1直線状のセルのみ)に処理を行うところを見ていきます。
今回は1行目だけを考えます。
①コード組立て
For z = 1 To 7
Cells(1, z) = K + 1
K = K + 1
Next z
Cells(行,列)は、セル位置を表しています。
この例ですとCells(1, z)は1行目のz列目のセルを表しています。
この様にセル位置を表示する方法として、「行・列共に数字で表現できる」Cellsを使用することになります。
そして
K = 100
とすると、
このVBAコードを実行すると、このようになります。

次に(変数を1つ増やして)他の行にも同じ処理を広げます
1行目に行った処理を続けて2行目3行目と広げていきたいと思います。5行目まで処理していきましょう。
先ほどは「zという列のための変数」を使いましたが、
「行のためのyという変数」を作ります。
考え方として、「①コード組立ては1行分の処理コードセット」と考えてください。
そのコードセットを5回繰り返します。
セル位置を表示するCells(1, z)をCells(y, z)というように
行を表す「1」を「y」に変更します。
つまり、組み立てるVBAコードは、
②コード組立て
For y = 1 To 5
For z = 1 To 7
Cells(y, z) = K + 1
K = K + 1
Next z
Next y
このVBAコードを実行すると、このようになります。

列のセル数7個、行のセル数5個 合計35個のセルを処理しました。
さらにこのSheet1での処理を、Sheet3まで広げます
②コード組立てで組み立てたコードは、1枚のシート上での作業と考えてください。
この処理を3枚のシート上で行います。その「シート番号を表す変数をx」とします。
今回は3回この作業を繰り返すことになります。
Sheet1やSheet2、Sheet3は、Worksheets(〇)で表現・表示します。「〇」は数字です。
つまり、組み立てるVBAコードは、
③コード組立て
For x = 1 To 3
Worksheets(x).Select
For y = 1 To 5
For z = 1 To 7
Cells(y, z) = K + 1
K = K + 1
Next z
Next y
Next x
このVBAコードを実行すると、このようになります。





処理したセルの数は、列7個x行5個xシート3個 で105個 になります。
VBAコード完成させると3重入れ子(ネスト)になっています
実行可能なプロシージャー化したコードを記述しておきます。
Sub 入れ子ループ()
Dim x As Long
Dim y As Long
Dim z As Long
K = 100
For x = 1 To 3
Worksheets(x).Select
For y = 1 To 5
For z = 1 To 7
Cells(y, z) = K + 1
K = K + 1
Next z
Next y
Next x
End Sub

For~Nextの入れ子ループコード理解のまとめ

この様に結論から見て、逆算式に理解して行こうとすると、「あれれ?」と迷ってしまう内容も、
組み立て順に見て行くと ”無茶苦茶カンタン” に理解できたでしょう。
この様に、
エクセルVBAコードを理解していくためには、このように組み立て順に見て行くことが結構大事だと思います。
また何か気になるテーマを見つけましたら、このようなショート記事にしたいと思います。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。