ループ
ループは、特定のコードブロックを指定した回数繰り返し実行させる場合などに使用します。またループの実行回数は、不特定値とすることも可能です。
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 は任意の条件を示します)。
- Do While...Loop バージョン
ここではすべてのパスの前に、While の後の条件が、true であるかどうかが確認され、その場合のみループが実行されます。
Do While A > 10 ' ... loop body Loop
- Do Until...Loop バージョン
ここでは、Until の後の条件が false であると評価されれば、ループが実行されます。
Do Until A > 10 ' ... loop body Loop
- Do...Loop While バージョン
ここでは最初のループパスの後の条件のみが確認され、While の後の条件が、false であると評価されると終了します。
Do ' ... loop body Loop While A > 10
- Do...Loop Until バージョン
ここでも最初のパスの後の条件が確認されますが、Until の後の条件が true であると評価されると終了します。
Do ' ... loop body Loop Until A > 10
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). |