For...Next Statement

For...Next ブロックの間にあるステートメントを、指定回数分だけ繰り返し実行させます。

構文:

For counter=start To end [Step step]

ステートメントブロック

[Exit For]

ステートメントブロック

Next [counter]

変数:

Counter: ループカウンターとして用いる変数で、イコール記号の右側の値 (start) が初期値として割り当てられます。使用可能なものは、数値変数だけです。ループカウンターの値は、Step の指定値に応じて加算ないし減算が行われ、End の指定値に到達するかがチェックされます。

Start: ループ開始時における初期値を指定する数値変数。

End: ループ終了時における終了値を指定する数値変数。

Step: ループカウンターの加算幅ないし減算幅を指定する増分値。Step に値を指定しないと、ループカウンターの増分値は 1 とされます。この場合は、Start の指定値よりも大きな値を、End に指定する必要があります。ループカウンターの値を減算させる場合は、Step に負の値を指定して、Start の指定値よりも小さな値を End に指定する必要があります。

For...Next ループでは、パラメーター群で指定する回数分だけ、ステートメントブロックの全コードが繰り返されます。

ループカウンターの値が変化すると、終了値に到達したかを LibreOffice Basic がチェックします。カウンター値が終了値に到達すると、ループは終了します。

For...Next ステートメントは、複数のものをネスト (入れ子化) することができます。Next ステートメントに続けて変数名を指定しない場合、各 Next は一番近くに存在する For ステートメントに対応づけられます。

増分値を0とすると、For から Next までの間にあるステートメントブロックが永続的に繰り返し実行され続けます。

カウンタ変数値の増減に対しては、オーバーフローまたはアンダーフローの発生を LibreOffice Basic がチェックします。 カウンター変数の値が End の指定値を超過するか (Step に正の値を指定した場合)、End の指定値を下回った (Step に負の値を指定した場合) 段階で、ループは終了します。

Exit For ステートメントを指定すると、ループは無条件に終了させられます。このステートメントは、For...Next ループの内部に記述する必要があります。この場合も、下記の例のように If...Then ステートメントを使って、終了条件を満たしているかの判定が行えます。

For...

ステートメント群

If 終了条件 = True Then Exit For

ステートメント群

Next

注意:複数の For...Next ループをネストしている場合、1 つの Exit For ステートメントで無条件に終了できるループは 1 つだけです。

下記の例では、初期設定として各種の名前を代入した要素数 10 の配列 ( sEntry( )) を用意しておき、二重にネストしたループを使って要素の並べ替えを行っています。

Sub ExampleSort

Dim sEntry(9) As String

Dim iCount As Integer

Dim iCount2 As Integer

Dim sTemp As String

    sEntry(0) = "Jerry"

    sEntry(1) = "Patty"

    sEntry(2) = "Kurt"

    sEntry(3) = "Thomas"

    sEntry(4) = "Michael"

    sEntry(5) = "David"

    sEntry(6) = "Cathy"

    sEntry(7) = "Susie"

    sEntry(8) = "Edward"

    sEntry(9) = "Christine"

    For iCount = 0 To 9

        For iCount2 = iCount + 1 To 9

            If sEntry(iCount) > sEntry(iCount2) Then

                sTemp = sEntry(iCount)

                sEntry(iCount) = sEntry(iCount2)

                sEntry(iCount2) = sTemp

            End If

        Next iCount2

    Next iCount

    For iCount = 0 To 9

        Print sEntry(iCount)

    Next iCount

End Sub