ループ

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png


ループは、特定のコードブロックを指定した回数繰り返し実行させる場合などに使用します。またループの実行回数は、不特定値とすることも可能です。

For...Next

For...Next ループは、特定回数の繰り返し実行を行うためのものです。この場合の繰り返し回数は、ループカウンタを使って指定します。このサンプルコードでは、変数 I はループカウンタで、初期値は 1 です。このカウンタの値は、ループを 1 回実行するごとに 1 ずつ増加されます。最終的に変数 I の値が 10 に等しくなった段階で、ループは終了します。

Dim I 
For I = 1 To 10
  ' ...  Inner part of loop 
Next I

ループカウンタの増分値を 1 以外にする場合は、次のように Step を使用します。

Dim I 
For I = 1 To 10 Step 0.5
  ' ... Inner part of loop 
Next I

上記のサンプルコードでは、ループを 1 回実行するごとにカウンタの値は 0.5 ずつ増加されるため、ループは最終的に 19 回実行されることになります。

ループの増分値には、負の値を指定することもできます。

Dim I 
For I = 10 To 1 Step -1
  ' ... Inner part of loop 
Next I

上記のサンプルコードではカウンタの初期値を 10 として、ループを 1 回実行するごとにカウンタの値を 1 ずつ減算させ、最終的に 1 となるまでループを実行しています。

Exit For ステートメントを使用すると、For ループを強制的に終了させることができます。次のサンプルコードでは、ループの 5 巡目で強制的に終了します。

Dim I 
For I = 1 To 10 
  If I = 5 Then 
    Exit For
  End If
  ' ... Inner part of loop 
Next I

For Each

VBA の For Each...Next ループバリアントは Apache OpenOffice Basic でサポートされています。For Each ループは For...Next ループのように明示的なカウンタは使用しません。For Each ループは、「n 回繰り返す」ではなく、「このセット内のすべてに対して実行する」ということです。たとえば、以下の通りです。

Const d1 = 2
Const d2 = 3
Const d3 = 2
Dim a(d1, d2, d3)
For Each i In a()
    ' ... Inner part of loop 
Next i

Do...Loop

Do...Loop は、特定回数のループを行うものではありません。Do...Loop によるループ処理は、特定の条件が満たされるまで繰り返し実行されます。Do...Loop には、4 つのバージョンがあります。最初の 2 つのサンプルコードでは、ループ内のコードがまったく実行されない可能性があります (「0 回実行」というロジック)。その後のサンプルコードでは、ループ内のコードが最低 1 回実行されます。(次のサンプルコードで、A > 10 は任意の条件を示します)。

  1. Do While...Loop バージョン
    Do While A > 10
       ' ... loop body
    Loop
    ここではすべてのパスの前に、While の後の条件が、true であるかどうかが確認され、その場合のみループが実行されます。
  2. Do Until...Loop バージョン
    Do Until A > 10
      ' ... loop body
    Loop
    ここでは、Until の後の条件が false であると評価されれば、ループが実行されます。
  3. Do...Loop While バージョン
    Do
      ' ... loop body
    Loop While A > 10
    ここでは最初のループパスの後の条件のみが確認され、While の後の条件が、false であると評価されると終了します。
  4. Do...Loop Until バージョン
    Do
      ' ... loop body
    Loop Until A > 10
    ここでも最初のパスの後の条件が確認されますが、Until の後の条件が true であると評価されると終了します。

For...Next ループと同様に、Do...Loop にも強制終了用のコマンドが用意されています。この場合は Exit Do コマンドにより、ループ内の任意の位置で強制終了が行えます。

Do 
  If A = 4 Then
    Exit Do
  End If
  ' ... loop body
Loop While A > 10

プログラミングの例: 埋め込みループを使用したソート

ループの用途としては、リストの検索、値の取得、複雑な数値計算など、様々な処理で利用されています。次のサンプルコードは、2 つのループ処理を用いてリストを名前でソートするアルゴリズムです。

Sub Sort
  Dim Entry(1 To 10) As String
  Dim Count As Integer
  Dim Count2 As Integer
  Dim Temp As String
 
  Entry(1) = "Patty"
  Entry(2) = "Kurt"
  Entry(3) = "Thomas"
  Entry(4) = "Michael"
  Entry(5) = "David"
  Entry(6) = "Cathy"
  Entry(7) = "Susie"
  Entry(8) = "Edward"
  Entry(9) = "Christine"
  Entry(10) = "Jerry"
 
  For Count = 1 To 9
    For Count2 = Count + 1 To 10
      If Entry(Count) > Entry(Count2) Then
        Temp = Entry(Count)
        Entry(Count) = Entry(Count2)
        Entry(Count2) = Temp
      End If
    Next Count2
  Next Count
 
  For Count = 1 To 10
    Print Entry(Count)
  Next Count
 
End Sub

ここでは 2 つの値を 1 組にして順序の入れ替え作業を行い、最終的に昇順で並ぶまでこの作業を繰り返しています。その際に個々の変数値は 1 つずつ位置をずらしていきますが、この動きはちょうど泡が移動する様子に似ています。このような理由から、このタイプのアルゴリズムは一般にバブルソート と呼ばれています。


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools