Do〜Loopステートメントは、条件が満たされるまで処理を繰返します。
(指定した条件が真(True)の間、もしくは真(True)になるまで処理を繰返します。)
| ステートメント | 条件判断 | 繰返し処理 |
| Do While 条件 Loop | ループの前に条件判断 | 「条件」が満たされている間は処理を繰返す |
| Do 条件 Loop While | ループの後で条件判断 | |
| Do Until 条件 Loop | ループの前に条件判断 | 「条件」が満たされるまで処理を繰返す |
| Do 条件 Loop Until | ループの後で条件判断 |
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)、繰返しメッセージが表示されることが確認されます。 |
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 |
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」の書式が変更されました。 |
条件が成立するまで、処理を繰り返します。ループの後で条件判断をする為、最低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行目) そうすることで、連続して計算する場合、「合計」部分まで、計算されないようにしています。 |
Do 〜 Loopステートメントは、Fo 〜 Next ステートメントのように処理の実行回数が決まっていない為、条件が満たされない場合、永久に処理を繰り返します。
このことを「無限ループ」といいます。
強制中断方法は、「Ctrl」+「Pause」です。