Do~Loopステートメント

Do~Loopステートメントは For~Nextステートメント と同じで処理を繰り返します。

For~Nextステートメントは For i = 2 To 11 のように繰り返す回数を指定します。
Do~Loopステートメントは 空白になったら終了、合計の文字になったら終了 と条件を指定します。

パチンコ遊技台のデータを取得する場合では、私はDo~Loopステートメントを使用します。それは店舗によって設置台数が異なりますし、PSの増減が発生するため繰り返す回数を事前に指定できないからです。

以下の例は2~11行目の売上の合計を求めます。

Sub 繰り返し1()
  Dim i As Long
  Dim Lng_uriage As Long

  i = 2
  Do While Cells(i, “A”) <> “”
    Lng_uriage = Lng_uriage + Cells(i, “B”).Value
    i = i + 1
  Loop

  MsgBox “売上の合計は” & Lng_uriage & “円です”
End Sub

Do While Cells(i, “A”) <> “” の While はA列の台番号のセルが空白ではない場合処理を繰り返すという意味です。

Whileの逆で Until があります。

Sub 繰り返し2()
  Dim i As Long
  Dim Lng_uriage As Long

  i = 2
  Do Until Cells(i, “A”) = “”
    Lng_uriage = Lng_uriage + Cells(i, “B”).Value
    i = i + 1
  Loop

  MsgBox “売上の合計は” & Lng_uriage & “円です”
End Sub

Until はA列の台番号のセルが空白ではない場合処理を繰り返すという意味です。
どちらも同じ動作になります。

教科書どおりに説明すると以下のようになります。
While  条件が正しい間は繰り返す
Until   条件が正しくない間は繰り返す

どちらを使うのが正しいということはありません。

WhileやUntilを使用せず以下のようにすることもできます。

Sub 繰り返し3()
  Dim i As Long
  Dim Lng_uriage As Long

  i = 2
  Do
    If Cells(i, “A”) = “” Then Exit Do
    Lng_uriage = Lng_uriage + Cells(i, “B”).Value
    i = i + 1
  Loop

  MsgBox “売上の合計は” & Lng_uriage & “円です”
End Sub

If Cells(i, “A”) = “” Then Exit Do は列の台番号のセルが空白になったらDo~Loopを抜けるという事です。Exitは出口という意味で非常口の表示にも使われているためイメージし易いですね。

実務では、条件を複数指定する場合があります。
Do~Loop 空白になったら抜ける or 合計になったら抜ける と。
その場合以下のようにします。

Sub 繰り返し4()
  Dim i As Long
  Dim Lng_uriage As Long

  i = 2
  Do
    If Cells(i, “A”) = “” Then Exit Do
    If Cells(i, “A”) = “合計” Then Exit Do
    Lng_uriage = Lng_uriage + Cells(i, “B”).Value
    i = i + 1
  Loop

  MsgBox “売上の合計は” & Lng_uriage & “円です”
End Sub

個人の癖ですが、私は Exit Do を使用する記述方法を多用します。どれが正しいわけではありません。用途によって使い分けて下さい。

余談ですがExit Do以外にも For~NextステートメントではExit For として使用します。
Exit はExit ステートメントで処理を中止する命令です。