目次
Do Whileでループ 伊川が請負った仕事の一部を紹介
こんにちは。伊川(@naonaoke)です。
今回の記事は、Do Whileのループについての紹介です。
初心者のころは、どうしてもループが苦手になりがちです。
特に、無限ループに入ると、停止の方法もわからず、強制終了したこともあります。
特に、このDo While系では、ありがちです。
今回のブログは、こんな人におすすめ
- いまいち、ループを理解できていない人
- VBA初心者の人
- For Next構文以外のループを知りたい人
解決
音読した内容をチャートで記載してみる。
コードに関しては、11行くらいです。
Do Whileのループ
この、Do Whileに似たコードで、Do Until というループもあります。
そんなに違いはないのです。
今回は、
Do While を選択しました。
Do While は条件を満たすまで、繰り返しをします。
つまり、継続する条件を記載します。
For Nextとの違い
For Nextは、繰り返す回数が決まっています。
ただし、実務では、最終行などは、決まっていないので、maxrow等で、最終行を指定します。
今回の業務内容は、競馬のファイルを作成することです。
競馬をご存じの方は、競馬とは、12レースなので、回数は決まっています。
しかし、ごく稀に、11レースしかない場合や、2020年の3月には、3レース~12レースといような場合がありました。
つまり9レースしかないのです。
この突然の出来事に、対応しないと、お金をもらうことはできません。
Do Whileのループ 作業手順 その1 作業内容を確認
上の図には、セルE1に、中山競馬場の、中山という値があります。
A列には、1行置き、中山という値があります。
セルE1と、A列の中山が一致するときは、セルAとその隣のセルBの値を、Sheet2に転記します。
この内容で、中山が、一致するまで、ループをさせます。
また、セルE1には、初めから、値は入力されていないので、お客様が、競馬場を選択するときに、セルE1に値がセットされるようになっています。
Do Whileのループ 作業手順 その2 中山と一致するセルをどうやって見つけるのか
これも色々な方法があります。
Findを使う場合もありますが、今回は、Matchを使いました。
Matchは、一致したセルの縦列の番号を返します。
つまり、cells(Matchで返す数字,1)が、一致した時 というようにします。
Do Whileのループ 作業手順 その3 Matchが返す値を、tenkiという変数に代入する
コード自体は、Application.WorksheetFunctionを使いました。
Application.WorksheetFunctionを利用することで、WorkSheet関数と同じロジックで、VBAのコードを記載することが出来ます。
Excelって本当にすごいと思います。
これで、Match関数が取得した値で、中山と一致するセルを特定することが出来ました。
Do Whileのループ 作業手順 その4 一行置きになっているセルとどのように特定するのか
このような、つまらないことで、初心者の時は、悩みます。
悩んだら、最後、まさに無限ループに陥ります。
一行飛ばしなら、考え方としては、カウントアップの方法を考えればいいのです。
これだけです。
この記載も最初は意味がわからないと思います。
これは、iという変数に、元の、iの値に、2を足して、再度、変数iに代入するという意味です。
上の図が、完成したコードになります。
実行結果
Do Whileのループ 作業手順 その5 転記された、一行置きの行間を削除したい
今回は、For Nextで、空白の行を削除しました。
For Nextの一行置きは、Step1と表現します。
これも覚えてしまえば、カンタンですね。
変数i が、3~20までの間で、3,5,7,9・・・・・・・ と、20まで変化します。
整形されました。
ここがポイント
動画の中では、For Nextを使わないで、転記する方法も紹介しています。ループを理解している人のコードは、少ないですね。私も、初めのころは、処理の分だけコードを記載していました。しかし、ループを理解すると、また、VBAが面白くなるのです。
まとめ
今回は、ループの説明をしました。
ループを理解していないと、コードを書くこと自体が面倒なので、しっかりと理解しましょう。
他にもこのサイトで、ループを紹介していますので、参考にしてください。
今回のサンプルファイルは、No171です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。