はい。今回も「ぐるぐる」です。
Do While ... Loop と Do Loop ... While について学びます。
どっちがどっちなんだか、時々こばとも分からなくなってしまうこともあるけど、まあ、必要なときにググって思い出せばいいわけで。何はともあれ「ぐるぐる」しながら学びましょう。
Do While ... Loop でループします
まずは Do While ... Loop です。
While といえば、英語で「~している間」という意味ですが、VBA でも「条件を満たすまでは処理しましょう」というステートメントです。Do While ... Loop の「 ... 」の部分は繰り返す処理の内容が入ります。今回もスペシャルなサンプルコードを用意しました。その名も "KobatoLoop1" です! ぜひコピーしてお試しくださいな。
Dim y As Long
y = 1
'y が 10 未満の間は処理を繰り返します
Do While y < 10
Cells(y, 1) = "こばと"
y = y + 1
Loop
End Sub
さっそく実行してみましょ~。
アクティブなワークシートがこんなふうになりますよ~。
誰ですか!?
「気持ち悪いから、さっさと消そう」なんて言ってる人は!?
まあとにかく、サンプルの
という行では「y が 10 未満の間は処理を繰り返しましょう」と命令しているわけです。その処理内容はというと、
でセルに「こばと」という文字列を書き込むというものです。それから y に値をひとつ足して次の処理に向かいます。で、最後に Loop で閉じる。はい、居眠りしない。ここ、テストに出ますよ(← 何のテスト?)。y が 10 を超えたところでループはストップするので、9 行目まで書き込まれることになります。
上のサンプルの 3 行目を y = 10 に書き換えてみます。
Dim y As Long
y = 10
Do
Cells(y, 1) = "こばと"
y = y + 1
Loop While y < 10
End Sub
このマクロを動かしても、何も起こりません。
そりゃそうですよね。ループが始まる前に、y の値は 9 を超えちゃってるんですから。でも、これは次の Do ... Loop While の伏線です。
Do ... While Loop でループします
それでは Do ... Loop While について説明します。さきほどの Do While ... Loop とは「 ... 」の位置が違っています。今度は Do の後にすぐに処理内容が記述されます。さきほどの KobatoLoop2 を Do ... While Loop を使って書き換えてみます。
Dim y As Long
y = 10
Do
Cells(y, 1) = "こばと"
y = y + 1
Loop While y < 10
End Sub
これも一見して何も動きそうにないマクロですが ......
はい。こばとが1羽だけぽつんと現れました。
どうしてこんなことになったのかというと、条件文
の前に、Do 以下の処理が 1 回だけ実行されてしまうからです(プログラムのコードは基本的に書いた順番に処理されていきます)。y には 10 の値が入っていますから、Cells(10,1)、つまりセル A(10) に「こばと」が書き込まれてしまうのです。こんなふうに、Do ... Loop While と Do Loop ... While は微妙に処理の仕方が異なっているので、目的に応じて使い分けるようにしてくださいな。