処理を繰返す (Do 〜 Loop)  Fom153

Do〜Loopステートメントは、条件が満たされるまで処理を繰返します。
(指定した条件が真(True)の間、もしくは真(True)になるまで処理を繰返します。)

Do 〜 Loop ステートメントの種類
ステートメント 条件判断 繰返し処理
Do While 条件 Loop ループの前に条件判断 「条件」が満たされている間は処理を繰返す
Do 条件 Loop While ループの後で条件判断
Do Until 条件 Loop ループの前に条件判断 「条件」が満たされるまで処理を繰返す
Do 条件 Loop Until ループの後で条件判断

Do While 〜 Loop ステートメント

Whileの後に「条件」を入力します。条件が成立している間は処理を繰り返します。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文

Do While 条件
  処理
Loop

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

<例1>セル「B2」からアクティブセルを右方向に移動し、空白セルでない間メッセージボックスを表示するプログラムを作成する場合
    ※アクティブセルの移動順「ActiveCell.Offset(0、1)」・・・「B2」→「C2」→「D3」の順に移動します。

条件判断が Do Whileの後にあるため、開始セル「B2」が空白の場合は、処理が実行されません。

     

「Loop1」プログラム 解  説
Sub Loop1()
Dim i As Integer
i = 1
Range("B2").Select
Do While ActiveCell.Value <> ""   '条件
MsgBox i & "回目の表示"
i = i + 1



ActiveCell.Offset(0, 1).Select     '処理
Loop

End Sub
Sub Loop1()
 変数 i を宣言
 1を変数 i に代入
 セル「B2」を選択する。
 条件→Do While アクティブセルの値が空白("") でない(<>)間処理を繰返す。
 メッセージボックスを表示する。

 「右辺の「変数 i +1」の値を左辺の変数 i に代入

 処理→1つ右の列にセルを移動する。
 Loop

End Sub
アクティブセルが列方向に移動し空白でない間(セル範囲B2〜D2)、繰返しメッセージが表示されることが確認されます。

Do 〜 Loop While ステートメント

Loop Whileの後に条件を入力します。「条件」が成立している間、処理を繰り返します。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文

Do
   処理
Loop While  条件

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

<例2>セル「B5」からアクティブセルを右方向に移動し、空白セルでない間、メッセージボックスを表示するプログラムを作成する場合

条件判断がLoop Whileの後にあるため、開始セル「B5」が空白であっても処理が実行されます。

   

「Loop2」プログラム 解  説
Sub Loop2()
Dim i As Integer
i = 1
Range("B5").Select
Do
MsgBox i & "回目の表示"
i = i + 1
ActiveCell.Offset(0, 1).Select
Loop While ActiveCell.Value <> ""

End Sub
Sub Loop2()
変数 i を宣言する。
1を変数 i に代入する。
セル「B5」を選択する。
Do
メッセージボックスを表示する。
変数 i に1を加え i に代入する。
アクティブセルを右に1列移動する。
Loop While アクティブセルが、空白でない間繰返す。

End Sub

Do Until 〜 Loop ステートメント

Untilの後に条件を入力します。「条件」が成立するまで、処理を繰り返します。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文

Do Until 条件
  処理
Loop

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

<例3>セル「B10」からアクティブセルを右方向に移動して、空白セルになるまで、フォントの書式を変更するプログラムを作成する場合

「Loop3」のプログラム 解  説
Sub Loop3()
Range("B10").Select
Do Until ActiveCell.Value = ""
ActiveCell.Font.ColorIndex = 3
ActiveCell.Font.Italic = True
ActiveCell.Offset(0, 1).Select
Loop
End Sub
Sub Loop3()
セル「B10」を選択する。
Do Until アクティブセルが空白になるまで繰返す。
アクティブセルのフォントカラーを赤(3)にする。
アクティブセルのフォントを斜体にする。
アクティブセルの1列右に移動する。
Loop
End Sub
セル「B10」から「D10」の書式が変更されました。

Do 〜 Loop Until ステートメント

条件が成立するまで、処理を繰り返します。ループの後で条件判断をする為、最低1回は処理を実行します。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
構文

Do
  処理
Loop Until  条件

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

<例4>セル「B15」からアクティブセルを右方向に移動して、空白セルになるまでフォント書式を変更するプログラムを作成する場合

「Loop4」のプログラム 解  説
Sub Loop4()
Range("B15").Select
Do
ActiveCell.Font.ColorIndex = 3
ActiveCell.Font.Italic = True
ActiveCell.Offset(0, 1).Select
Loop Until ActiveCell.Value = ""
End Sub
Sub Loop4()
セル「B15」を選択する。
Do 
アクティブセルのフォントカラーを赤(3)にする。
アクティブセルのフォントを斜体にする。
アクティブセルの1列右に移動する。
Loop Until アクティブセルが空白になるまで繰返す。
End Sub
セル「B15」から「D15」の書式が変更されました。

練習問題

◆Do 〜 Loop を使用して価格の合計金額を求める場合

「Loop5」のプログラム 解  説
Sub Loop5()
Dim total As Long
Range("C4").Select
Do While ActiveCell.Value <> ""
total = total + ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(1, 0).Value = total

End Sub
Sub Loop5()
変数「total」を宣言する。
セル「C4」を選択する。
Do While アクティブセルが空白でない間処理を繰返す。
「アクティブセルの値と「total」」を「変数「total」に代入する。
アクティブセルの1つ下に移動する。
Loop 
アクティブセルの1つ下のセルに「total」を代入する。’※1
End Sub
●※1・・・「アクティブセルの1つ下のセル」に「total」を設けることで価格を合計する部分と合計金額の部分を分けています。(11行目)
そうすることで、連続して計算する場合、「合計」部分まで、計算されないようにしています。

無限ループ  Fom162

Do 〜 Loopステートメントは、Fo 〜 Next ステートメントのように処理の実行回数が決まっていない為、条件が満たされない場合、永久に処理を繰り返します。
このことを「無限ループ」といいます。
強制中断方法は、「Ctrl」+「Pause」です。