| 繰り返し処理(基礎編) |
01 While文 02 Do文 ・Do・・・Loop ・Do Until・・・Loop ・Do While・・・Loop ・Do・・・Loop While ・Do・・・Loop Until 03 For文 ・For・・・Next ・For Each・・・Next
条件式が真(True)の間処理を繰り返し実行します。While・・・Wendループの中にWhile・・・Wendループを組み込む構造(ネスト構造)にすることができます。
While 条件式 繰り返し実行する処理
Wend
Do・・・Loopステートメントは前判断と後判断を行うことができ,ループ条件としてUntil(条件式を満たすまで)またはWhile(条件式を満たしている間)を組合わせることができます。この組合わせで4種類のフロー制御ができます。ループを強制的に抜けるにはExit Doステートメントを使用します。
Do 繰り返し実行する処理 [Exit Do] Loop
前判断とは,繰り返し実行する処理を行う前に条件を判断を行うことです。条件式によっては,一度もループに入らず処理を終了することがあります。
Do Until 条件式 繰り返し実行する処理 [Exit Do] Loop
Do While 条件式 繰り返し実行する処理 [Exit Do] Loop
後判断では,繰り返し実行する処理を必ず1回は実行します。
Do 繰り返し実行する処理 Loop While 条件式
Do 繰り返し実行する処理 Loop Until 条件式
【サンプルコード】 いずれも1から10までの和を計算します。
Sub sum1() Dim Sum As Integer Dim i As Integer Sum = 0: i = 1 While i <= 10 Sum = Sum + i: i = i + 1 Wend End Sub
Sub sum2() Dim Sum As Integer Dim i As Integer Sum = 0: i = 1 Do Until i > 10 Sum = Sum + i: i = i + 1 Loop End Sub
Sub sum3() Dim Sum As Integer Dim i As Integer Sum = 0: i = 1 Do Sum = Sum + i: i = i + 1 Loop Until i > 10 End Sub
Sub sum4() Dim Sum As Integer Dim i As Integer Sum = 0: i = 1 Do While i <= 10 Sum = Sum + i: i = i + 1 Loop End Sub
Sub sum5() Dim Sum As Integer Dim i As Integer Sum = 0: i = 1 Do Sum = Sum + i: i = i + 1 Loop While i <= 10 End Sub
For・・・Nextステートメントは指定された回数だけ繰り返し処理を行います。Stepにはカウンターに加算される値を指定します。省略した場合は増分は1になります。強制的にループから抜け出すにはExit Forステートメントを使用します。For・・・Nextループの中にFor・・・Nextループを組み込む構造(ネスト構造)にすることができます。
For カウンタ=初期値 To 最終値 [[Step 増分] 繰り返し実行する処理 Next [カウンタ]
初期値>最終値 の場合は増分は負の数を指定します。
For カウンタ1=初期値1 To 最終値1 [[Step 増分1] For カウンタ2=初期値2 To 最終値2 [[Step 増分2 繰り返し実行する処理 Next [カウンタ2] Next [カウンタ1]
For Each・・・Nextステートメントは配列,レコード,コントロールなどを対象とした特殊なループ構造です。配列やコレクションの各要素に対して処理を繰り返して実行します。For... Each ステートメントをユーザー定義型の配列に使用することはできません。
For Each 要素を示す変数 In 配列またはコレクションの名前 繰り返し実行する処理 [Exit For] Next [要素を示す変数]
【サンプルコード】 (50以下の奇数の和を求める)
Sub sum() Dim i As Integer Dim sum As Integer sum = 0 For i = 1 To 50 Step 2 sum = sum + i Next i
MsgBox sum
End Sub
【サンプルコード】 カレントデータベースに含まれるすべてのテーブル名をイミディエイトウインドウに表示します。
Sub テーブルリスト表示()
Dim myobuje As AccessObject
For Each myobuje In CurrentData.AllTables
Debug.Print myobuje.Name & " ";
Next
End Sub