目次
2重ループの工程を説明
こんにちは。伊川(@naonaoke)です。
2重ループについて、質問がありましたので、解説をしたいと思います。
他の言語を勉強すると、大体、最初にループが来ます。
変数、ループを後から勉強するのは、VBAくらいではないでしょうか?
私もそうでしたが、ループを理解する日は、突然やってきます。
ループを理解すると配列も理解しやすくなります。
今回は、Index関数とMatch関数を使って説明します。
このブログはこんな人にお勧め
- ループを理解できていない人
- 2重ループが理解できない人
- ループを利用して、もっとコードを短縮したい人
解決
最初は難しいですが、わかりやすく解説しましたので、最後まで購読していただければ幸いです。
2重ループ
ループだけでも難しいのに、そのループを2重に使うことなどは、私も最初は想像できませんでした。
しかし、何度もコードを見ていくと、何となく理解できるものです。
何となく理解できたら、実際に自分でコードを作成して、動かすことが重要です。
今回は、競馬ネタになります。
2重ループ 作業手順 その1 データベース確認
上記6列(B列~G列まで)を一気に参照します。
では、順に説明します。
2重ループ 作業手順 その2 変数を決める
上の図のように変数を決めましょう。
最上段に、変数の意味を記載することによって、第三者が見てもわかるようにしておきましょう。
2重ループ 作業手順 その3 通常のVBAのループ文
上のようなコードになります。
この部分が肝となるコードになります。
IndexとMatch関数で、参照した値を変数myRに格納しています。
2重ループ 作業手順 その4 意外と知らないループの原則
私は、最初はなにもわからないで、コードを記載していたのです。
For Next構文は、変数iを使っています。
つまり、ループで参照する場所は、全て、変数iを使うという事です。
この理屈がわからず、勝手に変数を決めて、様々なエラーが発生したり、無限ループにはまった記憶があります。
この場合なら、変数iで統一しなければなりません。
まずは、1行、完成しました。
2重ループ 作業手順 その5 表示させたい列を数字で表す
ws_2.Range(“B:B”)に数字を利用して表現するには、どうしたらいいだろうか?
ループを利用するには、数字を利用する必要があります。
Range(“B:B”)は、Columns(2)と同じ意味になります。
上の図のコードは、同じ意味になります。
Range(“B:B”)を、Columns(2)という表現に変化させることができました。
Columns(2)のカッコの中の数字を、変数に置き換え、その変数をループさせるといいのではないか?
このような憶測が立ちます。
このようなコードを考えます。
変数jは、横にスライドします。
なので、表現したいセルにも、必ず、変数jを利用しないと、セルに値を表現できません。
注意しなければならないこと
ループの記載する順番を間違えてはいけません。
上記が完成のコードです。
完成しました。
ここがポイント
ループも配列も、丁寧に考えることです。最初は時間がかかりますが、慣れてくると、時間は短縮していきます。恐れて、ループを利用しないと、コードが長くなり、メンテナンスも面倒になります。是非、ループをみなさんのスキルにしてください。
まとめ
今回は、二重ループについて解説しました。
この記事で、ループの苦手意識がなくなれば、幸いです。
最後まで読んでいただき、ありがとうございました。
今回のサンプルファイルは、No173です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。