VBA Do While Loop/Do Loop While でループ処理

 はい。今回も「ぐるぐる」です。
 Do While ... LoopDo Loop ... While について学びます。
 どっちがどっちなんだか、時々こばとも分からなくなってしまうこともあるけど、まあ、必要なときにググって思い出せばいいわけで。何はともあれ「ぐるぐる」しながら学びましょう。
 

Do While ... Loop でループします

 まずは Do While ... Loop です。
 While といえば、英語で「~している間」という意味ですが、VBA でも「条件を満たすまでは処理しましょう」というステートメントです。Do While ... Loop の「 ... 」の部分は繰り返す処理の内容が入ります。今回もスペシャルなサンプルコードを用意しました。その名も "KobatoLoop1" です! ぜひコピーしてお試しくださいな。

 Sub KobatoLoop1()

  Dim y As Long

  y = 1

  'y が 10 未満の間は処理を繰り返します
  Do While y < 10
   Cells(y, 1) = "こばと"
   y = y + 1
  Loop

 End Sub

 さっそく実行してみましょ~。
 アクティブなワークシートがこんなふうになりますよ~。

 VBA における Do While Loop 繰り返し処理1

 誰ですか!?
 「気持ち悪いから、さっさと消そう」なんて言ってる人は!?
 まあとにかく、サンプルの

Do While y < 10

という行では「y が 10 未満の間は処理を繰り返しましょう」と命令しているわけです。その処理内容はというと、

Cells(y, 1) = "こばと"

でセルに「こばと」という文字列を書き込むというものです。それから y に値をひとつ足して次の処理に向かいます。で、最後に Loop で閉じる。はい、居眠りしない。ここ、テストに出ますよ(← 何のテスト?)。y が 10 を超えたところでループはストップするので、9 行目まで書き込まれることになります。

 上のサンプルの 3 行目を y = 10 に書き換えてみます。

 Sub KobatoLoop2()

 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 を使って書き換えてみます。

 Sub KobatoLoop3()

  Dim y As Long

  y = 10

  Do
   Cells(y, 1) = "こばと"
   y = y + 1
  Loop While y < 10  End Sub

 これも一見して何も動きそうにないマクロですが ......

 VBA における Do While Loop 繰り返し処理2

 はい。こばとが1羽だけぽつんと現れました。
 どうしてこんなことになったのかというと、条件文

Loop While y < 10

の前に、Do 以下の処理が 1 回だけ実行されてしまうからです(プログラムのコードは基本的に書いた順番に処理されていきます)。y には 10 の値が入っていますから、Cells(10,1)、つまりセル A(10) に「こばと」が書き込まれてしまうのです。こんなふうに、Do ... Loop While と Do Loop ... While は微妙に処理の仕方が異なっているので、目的に応じて使い分けるようにしてくださいな。

 ≫ メニューに戻って他の記事も読んで、またメニューに戻って ...... というようにループしましょう。

Google広告
スポンサーリンク
スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください