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