『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 は微妙に処理の仕方が異なっているので、目的に応じて使い分けるようにしてくださいな。

コメント

  1. あとりえこばと より:

    AI が解説! VBA の Do While Loop

    生徒: こんにちは、VBAのDo Whileループについて教えていただけますか?何か具体的な例を教えていただけると助かります。
     
    講師: こんにちは!もちろんです。Do Whileループは、特定の条件が満たされる間、繰り返し処理を実行するための構文です。まずは基本的な構文から説明しましょう。

    Do While 条件
        ' 実行するコード
    Loop

    この構文では、条件が真である限り、ループ内のコードが繰り返し実行されます。ループ内のコードは、条件が満たされるかどうかに関係なく、最初の一度は必ず実行されます。
     
    生徒: なるほど、ループ内のコードが最初の一度は必ず実行されるんですね。具体的な例を教えていただけますか?
     
    講師: もちろんです。例えば、1から10までの数値を合計するプログラムを作成したいとしましょう。以下はその例です。

    Sub DoWhileLoopSample()
        Dim sum As Integer
        sum = 0
        Dim i As Integer
        i = 1
    
        Do While i <= 10
            sum = sum + i
            i = i + 1
        Loop
    
        MsgBox "合計値は " & sum & " です。"
    End Sub

    この例では、sumという変数を用意して0で初期化し、iという変数を1で初期化しています。その後、Do Whileループ内でiが10以下である限り、sumにiの値を加え、iを1増やしています。最後に、MsgBoxを使って合計値を表示しています。
     
    生徒: なるほど、理解しました!このプログラムでは、1から10までの数値を合計しているんですね。
     
    講師: そうです、正解です!Do Whileループは、条件が満たされる限り、指定された処理を繰り返し実行するので、特定の条件を満たすまで処理が続くことができます。また、Do Whileループの条件式が最初から偽である場合、ループ内のコードは一度も実行されずにループを抜けます。
     
    生徒: 分かりました!Do Whileループの基本と具体的な例について教えていただき、ありがとうございます。もう少し練習してみたいです。
     
    講師: どういたしまして!練習するのは素晴らしいアイデアです。もし練習でわからない部分があれば、いつでも質問してください。喜んでお手伝いします!

  2. あとりえこばと より:

    【AI解説】VBA の Do Loop While

    生徒: こんにちは!前回のDo Whileループの説明、とても分かりやすかったです。今度はDo Loop Whileについて教えていただけますか?Do Whileとの違いや具体的な使い方が知りたいです。
     
    講師: こんにちは!もちろんです、Do Loop Whileについてお教えしましょう。Do Loop Whileは、ループの開始前に条件をチェックするため、ループ内のコードが最低1回は実行される点がDo Whileと異なります。なにか面白い例で説明しましょうか?
     
    生徒: はい、お願いします!なるべく楽しくわかりやすい例がいいですね。
     
    講師: 分かりました!では、宝探しゲームのプログラムを考えてみましょう。プレイヤーが指定した場所に宝があるかどうかを判定するプログラムです。
     
    生徒: それは面白そうです!どのように作るんですか?
     
    講師: まず、プレイヤーに場所を入力してもらうためのダイアログボックスを表示します。次に、Do Loop Whileループを使って、プレイヤーが宝の場所を正しく当てるまで繰り返し処理を行います。

    Sub DoLoopWhileSample()
        Dim targetLocation As String
        targetLocation = "トレジャー"
    
        Dim playerGuess As String
    
        Do
            playerGuess = InputBox("宝の場所を入力してください:")
        Loop While playerGuess <> targetLocation
    
        MsgBox "おめでとう!宝を見つけました!"
    End Sub

    この例では、targetLocation変数に宝の場所を設定しています(ここでは単純化のために「トレジャー」という固定の場所にしています)。プレイヤーにはplayerGuess変数を使って場所を入力してもらいます。ループは、playerGuessがtargetLocationと異なる場合に継続します。つまり、プレイヤーが宝の場所を正しく当てるまでループが続きます。正解したら「おめでとう!宝を見つけました!」というメッセージを表示します。
     
    生徒: なるほど、プレイヤーが宝の場所を当てるまでループが続くんですね!とても楽しそうなプログラムです。
     
    講師: ありがとうございます!Do Loop Whileは、特定の条件を満たすまで繰り返し処理を行うので、ゲームや入力の検証など、様々な場面で使える便利な構文です。もし他にも疑問や興味があることがあれば、何でも聞いてください!
     
    生徒: ありがとうございます!分かりやすい説明と楽しい例、とても勉強になりました。もっとVBAのループについて学びたいです!