当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【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のループについて学びたいです!

タイトルとURLをコピーしました