以前勉強会用に準備した記事ではFor~Nextだけを紹介しました。その時にも少しだけ触れましたが繰り返し処理にはほかの方法もあります。
上記リンク先で紹介しました「For~Next」が一番使いやすい為ほとんどこれを使うのですが人によっては違う方法が都合が良い場合があります。
それは対象にするデータがどんなものなのかにもよります。ただし○○というコードじゃないと表現出来ませんというのは基本的には無いです。
というわけでどのコードを用いるかは好みの問題となります。どのコードでも書き方によって互いの機能をほとんど補えてしまうので最初の頃はどれを使っても良いと思います。
気を付けるとしたらグループでコードを書いたり引き継ぎの資料込みで準備しているということであればどのコードで繰り返し処理を行うかは統一させておいたほうが良いと思います。
では紹介に移ります。以下のような順番で3回に分けて紹介する予定です。
For~Next については前回の記事でそれなりに書いたのでリンク先の記事を見ていただければと思います。再度リンクを用意します。
上記リンク先では書かなかったことを少し書き加えます。以下コードを用いて説明していきます。
このコードは最初に変数の変化量を決めます。リンク先では2~1000までと決めているのですが「○○列の最終行の行番号まで変化させたい」という様にある程度柔軟に変化量を設定することも可能です。
For d = 2 To Cells(Rows.Count, 1).End(xlUp).Row
というように書くと「A列の最終行の行番号までループする」となるので仮にA列は空欄を持ちながらも最大で3000行まで情報が入っているとすると「2~3000までdという変数が変化します」という事になります。
to以下を先に変数で取っておいて 「For d = 2 to 変数」という書き方でも使えます。
続いて行番号を変数にしているので繰り返し処理内でCells(変数,1)という様にコードを書けば繰り返し処理の中でA列のセルを順番に掴んでいくという作業を構築することができます。
掴んだセルに対して「○○の時は××・・・」という様に条件分岐を組み込めばセルの値毎に処理を変えることも可能です。
「If Cells(d,1) = "" then・・・」 という様に指定のセルが空欄だったら・・・という処理を変数の変化によって掴めるセルすべてに問いかけることが出来るようになります。
NextからForに戻る時に最初に設定した変数の値が1つ進むのも大きなメリットです。
ここでは変数dが2~3に変化していきます。後程紹介しますDoから始まる繰り返し処理の群は変数を進めるコードを書かないと可変しません。
こうやってやりたい事を分けて考えてコードに落とし込むのは面倒なのですが分けて考えることが出来るというメリットもあります。
最初の頃は考えやすいという印象を持ってました。そのため私はFor~Nextが一番覚えやすかったのかもしれません。
加えてFor~Nextは配列とも相性が良いです。
少し難しくなるのでまだ紹介してないのですが配列という機能を使うとコードの質や処理速度がものすごく上がります。
ゆくゆくは記事にするつもりですが配列との相性も良いというのもFor~Nextのメリットだと思っています。
では次に「Do~」で始まる処理達について紹介します。