【VBA】VBAで繰り返し処理してみた(Do文)

目次

Do文の繰り返し処理

こんにちは!

前回のIfに続いて、今回はDoを使った繰り返し処理について紹介します。

今回は少し難しいけど、使用頻度少な目なので、、

(* ̄- ̄)ふ~ん

って感じで見てください。

その前に、Forって何?って人は↓

VBAで繰り返し処理してみた(For文)VBAで繰り返し処理してみた(For文)

 

Do文の繰り返し条件

繰り返し条件には2通りの記述の仕方があります。

①While ~(条件を満たす間繰り返します

②Until ~(条件を満たすまで繰り返します

それから、その条件をDoに設定するかLoopに設定するかで、

大きく分けて4通りのDo文ができます。

要するに、、、

・Do while 条件 ~ Loop

・Do Until 条件 ~ Loop

・Do Loop while 条件

・Do Loop Until 条件

まあ、こんな感じの4通りにできますよ。ってこと。

わからなくて大丈夫です。サクッと次に行きましょう♪

 

図を使って解説

ここでは、流れ的なことと、4通りある内の2通りを図を使って解説します。

WhileとUntilの違いについて理解してくださいね。

2つともDoに条件式を書いて説明します。

まあ、『どこで繰り返しを抜けるのか。』ってことと、

じゃあ、どんな条件で抜けるのか。』これを理解するのが目的です😊

・とりあえずDo文の流れ

 

・Do While~について

・Do Until~について

なーんか、モヤモヤした感じでしょうか?

まだ、後半あるので力まずに行きましょう🙋

 

Forを含めた使い分け

ここも、ザックリと使い分けの説明しますねぇ😝

まず、どんなときにForを使うか。。。

・繰り返し処理の回数が明確なとき!

例えば、前回紹介した九九。『1~9』の繰り返ししか使いません。九九なので、10とか使わないよねぇ。

あと、一週間の合計出したいとか。一週間は『1~7』。

次に、じゃあ、Doはどんなときか。。。

・繰り返し処理の回数を決めたくない時!

例えば、待機処理やゲームとか。

ユーザーがゲームをクリアするのに何回挑戦するか。なーんて、メーカーは分からないよねぇ。

恋人が、いつトイレから出て来るかなんて分からないよねぇ。←変?

ちなみに、Loopに条件を書けば、少なくとも1回はDo~Loop内の処理が実行されます。

Doに条件を設定するかLoopに条件を設定するかの違いは、、ソレくらいかな?

そんな感じで、Doは中級者とか上級者向けかと思います💦

 

コードを記述して動作確認

今回は4通りもあるので大変。

Sub do1()
Dim i As Long
    Do While i < 10
        i = i + 1
        DoEvents
    Loop
    Debug.Print "ループが抜けた時の数値は" & i
End Sub

Sub do2()
Dim i As Long
    Do Until i < 10
        i = i + 1
        DoEvents
    Loop
    Debug.Print "ループが抜けた時の数値は" & i
End Sub

Sub do3()
Dim i As Long
    Do
        i = i + 1
        DoEvents
    Loop While i < 10
    Debug.Print "ループが抜けた時の数値は" & i
End Sub

Sub do4()
Dim i As Long
    Do
        i = i + 1
        DoEvents
    Loop Until i < 10
    Debug.Print "ループが抜けた時の数値は" & i
End Sub

do1 ⇒ ループが抜けた時の数値は10

do2 ⇒ ループが抜けた時の数値は0

do3 ⇒ ループが抜けた時の数値は10

do4 ⇒ ループが抜けた時の数値は1

如何でしょうか?

重要なのは何処で抜けたか、どんな条件で抜けたか。

F8で確認してみてください。今回は、その確認くらいでいいです👌

まあまあの数のマクロ組んでるけど、Do文はあまり使わないです。

事務処理のマクロなんて、事務的なこと(決まり切った事)なので当たり前かもしれないですね😅

 

無限ループについて

最後に無限ループについてです。

初心者がDoを使うと、条件を間違えて設定してしまい、ループを抜けなくなることが多々あると思います😫

DoよりForを優先して使用しましょう。

あと、どうしてもDoを使うときは、『DoEvents』を処理に入れましょう。

これで、パソコンがカッチカチに固まるのを防げます😝

(EscキーやBreakキーで中断可能になります)

 

 

んなわけで、今回は長いけど重要なことじゃないので、、、

ループが抜ける場所と条件DoよりFor優先DoEvents入れる

この三つくらい覚えておけばいいかと思います🖖

それでは、またねぇ✋