はい。今回も「ぐるぐる」しながら、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 は微妙に処理の仕方が異なっているので、目的に応じて使い分けるようにしてくださいな。
コメント
AI が解説! VBA の Do While Loop
生徒: こんにちは、VBAのDo Whileループについて教えていただけますか?何か具体的な例を教えていただけると助かります。
講師: こんにちは!もちろんです。Do Whileループは、特定の条件が満たされる間、繰り返し処理を実行するための構文です。まずは基本的な構文から説明しましょう。
この構文では、条件が真である限り、ループ内のコードが繰り返し実行されます。ループ内のコードは、条件が満たされるかどうかに関係なく、最初の一度は必ず実行されます。
生徒: なるほど、ループ内のコードが最初の一度は必ず実行されるんですね。具体的な例を教えていただけますか?
講師: もちろんです。例えば、1から10までの数値を合計するプログラムを作成したいとしましょう。以下はその例です。
この例では、sumという変数を用意して0で初期化し、iという変数を1で初期化しています。その後、Do Whileループ内でiが10以下である限り、sumにiの値を加え、iを1増やしています。最後に、MsgBoxを使って合計値を表示しています。
生徒: なるほど、理解しました!このプログラムでは、1から10までの数値を合計しているんですね。
講師: そうです、正解です!Do Whileループは、条件が満たされる限り、指定された処理を繰り返し実行するので、特定の条件を満たすまで処理が続くことができます。また、Do Whileループの条件式が最初から偽である場合、ループ内のコードは一度も実行されずにループを抜けます。
生徒: 分かりました!Do Whileループの基本と具体的な例について教えていただき、ありがとうございます。もう少し練習してみたいです。
講師: どういたしまして!練習するのは素晴らしいアイデアです。もし練習でわからない部分があれば、いつでも質問してください。喜んでお手伝いします!
【AI解説】VBA の Do Loop While
生徒: こんにちは!前回のDo Whileループの説明、とても分かりやすかったです。今度はDo Loop Whileについて教えていただけますか?Do Whileとの違いや具体的な使い方が知りたいです。
講師: こんにちは!もちろんです、Do Loop Whileについてお教えしましょう。Do Loop Whileは、ループの開始前に条件をチェックするため、ループ内のコードが最低1回は実行される点がDo Whileと異なります。なにか面白い例で説明しましょうか?
生徒: はい、お願いします!なるべく楽しくわかりやすい例がいいですね。
講師: 分かりました!では、宝探しゲームのプログラムを考えてみましょう。プレイヤーが指定した場所に宝があるかどうかを判定するプログラムです。
生徒: それは面白そうです!どのように作るんですか?
講師: まず、プレイヤーに場所を入力してもらうためのダイアログボックスを表示します。次に、Do Loop Whileループを使って、プレイヤーが宝の場所を正しく当てるまで繰り返し処理を行います。
この例では、targetLocation変数に宝の場所を設定しています(ここでは単純化のために「トレジャー」という固定の場所にしています)。プレイヤーにはplayerGuess変数を使って場所を入力してもらいます。ループは、playerGuessがtargetLocationと異なる場合に継続します。つまり、プレイヤーが宝の場所を正しく当てるまでループが続きます。正解したら「おめでとう!宝を見つけました!」というメッセージを表示します。
生徒: なるほど、プレイヤーが宝の場所を当てるまでループが続くんですね!とても楽しそうなプログラムです。
講師: ありがとうございます!Do Loop Whileは、特定の条件を満たすまで繰り返し処理を行うので、ゲームや入力の検証など、様々な場面で使える便利な構文です。もし他にも疑問や興味があることがあれば、何でも聞いてください!
生徒: ありがとうございます!分かりやすい説明と楽しい例、とても勉強になりました。もっとVBAのループについて学びたいです!