For~Nextのループと入れ子構造をVBA最速理解

fornextirekoeyecatch

For~Nextは、エクセルVBAのコード組み立ての中で頻繁に利用されます。For~Nextとその入れ子(ネスト)の考え方を最速理解できるようにします。

こんにちは、じゅんぱ店長(@junpa33)です。

エクセルVBAのコード組み立てで、非常によく使うステートメントの一つにFor~Nextでのループ処理があります。

今回はこのFor~Nextステートメントの使い方を説明します。

For~Nextの入れ子ループを最速理解

fornextnestp006

エクセル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を使用することになります。

MEMO

セル位置を表示するのにRange(“A1”)という表現方法もあります。が、

今回は列を動かしていくので、この表示では「A1→B1→C1→」と変化することになります。

ですので、数字の増減で変化させるわけではないため、

For z = 1 To 7のように表示させるのには不向きなタイプのセル表示方法になります。

そして

 K = 100

とすると、

このVBAコードを実行すると、このようになります。

fornextnest005

次に(変数を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コードを実行すると、このようになります。

fornextnest002

列のセル数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コードを実行すると、このようになります。

fornextnest002
Sheet1
矢印下001
fornextnest003
Sheet2
矢印下001
fornextnest004
Sheet3

処理したセルの数は、列7個x行5個xシート3個 で105個 になります。

VBAコード完成させると3重入れ子(ネスト)になっています

実行可能なプロシージャー化したコードを記述しておきます。

VBA
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
fornextnest001

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

fornextnestp007

この様に結論から見て、逆算式に理解して行こうとすると、「あれれ?」と迷ってしまう内容も、

組み立て順に見て行くと ”無茶苦茶カンタン” に理解できたでしょう。

この様に、

エクセルVBAコードを理解していくためには、このように組み立て順に見て行くことが結構大事だと思います。

また何か気になるテーマを見つけましたら、このようなショート記事にしたいと思います。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min