よく使うステートメント

【Do ~ Loop】ある条件を満たす間 処理を繰り返す

For ~ Next は、指定された回数だけ処理を繰り返すステートメントです。

これに対し、「Do ~ Loop」は与えられた条件を満たす間 処理を繰り返すステートメントです。

条件の与え方も「Do Until 条件式」「Do While 条件式」の二通りがあります。

これについて説明します。

Do ~ Loop について

数の累計が1500を超えるまで、その累計を表示するプログラムです。

「Do Until」と「Do While」を並べて動かします。
結果は同じです。
その表現方法の違いを理解してください。

Sub 条件処理()
 Dim PP As Integer
 Dim S As Integer ‘②

 ‘ Do ~ Untilを使用した場合
 PP = Cells(3, 2) ‘③
 S = 3    ‘④

 Do Until PP > 1500 ‘⑤
  Cells(S, 3).Value = PP ‘⑥
  S = S + 1 ‘⑦
  PP = PP + Cells(S, 2) ‘⑧
 Loop ‘⑤

 ‘ Do ~ While を使用した場合
 PP = Cells(3, 2) ‘③
 S = 3       ‘④

 Do While PP =< 1500 ‘⑨
  Cells(S, 4).Value = PP ‘⑩
  S = S + 1 ‘⑦
  PP = PP + Cells(S, 2) ‘⑧
 Loop ‘⑨
End Sub

① 「累計」を表す変数
② 表の「行」を表す変数
③ 表の「最初の行の数」をPPに代入
④ 最初の数の行数である 3 をSに代入

⑤ 累計が1500を超えるまで以下の処理を繰り返す
(1500を超えたらこのLoopから抜け出す)
⑥ 3列目に累計を書き出す
⑦ 行を一つずらす
⑧ 次の数を累計に加える

⑨ 累計が1500以下の間は下記の処理を繰り返す
(1500以下でなくなったらLoopから抜け出す)
⑩ 4列目に累計を書き出す

⑤と⑨の意味は同じように感じられますが、「PP>1500」と「PP=<1500」という条件式の違いをしっかり感じ取ることが肝要です。

Do Until PP>1500
 累計が1500 を超えるまでは(下記条件)を実行しなさい。

Do While PP=<1500
 累計が1500以下という条件を満たしている間は(下記条件)を実行しなさい。

最初の頃はどうしても混乱しがちです。
実務上最初のうちは「Do until ~ Loop」の使用のみに限ってもよろしいかと思います。

※ここではセルを Range ではなく Cells を使って説明しています。Cells につきましては下記を参照してください。

セルの位置を指定するプロパティ Range と CellsExcel はセルにいろいろなデータを書き込みます。 しかしExcelには 行数が1,048,576 、列数が16,384 ありま...

「Do ~ Loop Until」/「Do ~ Loop While」

このように Until (条件式)、While (条件式) を Do ではなく Loop の横に書くこともできます。

これは最低でも1回は処理を実行し、その処理の後に条件の判定が行われることになります。

上記の表を基に下記のように記述したとします。

Sub 条件処理()
 Dim PP As Integer
 Dim S As Integer
 
 PP = Cells(3, 2)
 S = 3
 
 Do
  Cells(S, 5).Value = PP
  S = S + 1
  PP = PP + Cells(S, 2)
 Loop Until PP > 100
End Sub

「累計が 100 を超えるまで処理を続けなさい」という意味です。

しかし最初の数から100を超えてるので、何も表示しないと思われますが、最初に Do を通るときに条件式がありませんので、最初の数 104は書き出されます。

その後 Loop 横で条件式が出ますので、ここでLoopから抜け出ることになり、2行目以降の累計は書き出されないということになります。

この記述方法も初心者のうちは混乱する記述法になります。
今の段階では特に使用を考えなくても問題ありません。

まずは「Do Until ~ Loop」をしっかり使えるようにしてください。