『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】Do While Loop, Do Loop While

はい。今回も「ぐるぐる」しながら、VBA の Do While … LoopDo 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() を実行してみましょう。
アクティブなワークシートがこんなふうになりますよ。
 
VBA における Do While 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() も一見して何も動きそうにないマクロですが ...
 
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 は微妙に処理の仕方が異なっているので、目的に応じて使い分けるようにしてくださいな。

コメント