エクセルVBA!For~Nextの入れ子ループを最速に理解する

fornextirekoeyecatch

エクセルVBAのコード組み立ての中で、For~Nextの入れ子ループ処理は頻繁利用するところです。

このFor~Nextの入れ子の考え方を最速で理解できるようにします。

理屈が分かればカンタンなことです。

 

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

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

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

 

エクセルVBA!For~Nextの入れ子ループを最速に理解する

 

エクセルVBAコードを組み立てる上で、セルの値を拾いに行ったり、

置きに行ったりするのにFor~Nextのループ処理は基本になります。

実際的には、入れ子(ネスト)構造にして処理を行っていくことが多くなります。

入れ子(ネスト)という複層構造になりますので、組み立てられたコードを見ても「何か複雑!」という印象になるかもしれません。

 

簡単に理解するためには、順番に組み立て行くところを確認しながら見て行くことが重要です。

 

一行分だけ(変数を1つ)を使ってFor~Nextの動作を確認する

 

Excelシートで言うと、一行のみや一列のみ(1直線状のセルのみ)に処理を行うところを見ていきます。

今回は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コードは、

②コード組立て

2重入れ子

  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個のセルを処理しました。

 

さらに(変数を1つ追加して)このSheet1での処理を、Sheet3まで広げます

 

②コード組立てで組み立てたコードは、1枚のシート上での作業と考えてください。

この処理を3枚のシート上で行います。その「シート番号を表す変数をx」とします。

今回は3回この作業を繰り返すことになります。

Sheet1やSheet2、Sheet3は、Worksheets(〇)で表現・表示します。「〇」は数字です。

つまり、組み立てるVBAコードは、

③コード組立て

3重入れ子

  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 fornextnest003 fornextnest004

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

 

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

 

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

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

fornextnest001

 

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

 

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

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

この様に、

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

 

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

 

参考記事
エクセルVBAのショートコードの記事でこんなものもあります。

取説!シート非表示VBAソフトの使い方を解説します。スキルで時短

 

エクセルVBAの学習についての一手

 

このような「For~Next」などのことをステートメントと言います。

エクセルVBAのコード作成のためには非常に重要な構造パーツになります。

エクセルVBA初級編から学習で出てくる内容ですので、しっかり覚えておいた方がいいです。

 

短期間でエクセルVBAの独学習得を目指したいなら

 

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

 

 

このサイトでよく使うVBAのコードのトピックを纏めています。

「VBA最速理解」の記事一覧を開く

 

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

 

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