トップ > スキル : アプリケーション > VBA for Access > 応用編(VBA基礎知識)
処理の繰り返し
同じ処理を何度も繰り返し実行する場合、決まった書式にしたがって記述するだけで実現できます。VBAには、次のような3種類の繰り返し文があります。
- Do…Loopステートメント
- For…Nextステートメント
- For Each…Nextステートメント
Do文、For文に大別できます。Do文は、条件によって繰り返す回数が変化しますが、For文は繰り返す回数をあらかじめ指定するところが異なります。
処理の繰り返し - Do文
Do…Loopステートメントは、前判断と後判断を行うことができ、ループ条件としてUntil(条件を満たすまで)、またはWhile(条件を満たしている間)を組合せることで4種類のフロー制御ができます。
Do Until ~ Loop ステートメント
指定した条件が有効になるまで処理を繰り返します。このステートメントは、条件を前判断するため、繰り返し実行する処理を行う前に条件を判断します。条件式によっては一度もループに入らずに処理を終了することがあります。
Do Until 条件式 繰り返す処理 Loop
(例)
i = 3 Do Until i <= 0 MsgBox i & "!" i = i - 1 Loop
初めにカウンタ変数iに「3」を代入してループ処理に移ります。カウンタ変数iが0以下になるまで繰り返す処理で、最初は「3」が代入されているので繰り返す処理を行います。処理は「3!」というメッセージが表示され、次にカウンタ変数iから1を減算してLoopへ行きます。動作はLoop行からDo行へ戻されます。次に、カウンタ変数iは「2」であるので、再び条件式と比較します。最終的には、「1!」というメッセージが表示されるまで繰り返し、カウンタ変数iに「0」が代入されると繰り返し処理が終了します。
もし、i = 3のところが初めからi = 0となっていれば、最初から条件を満たすことになるので、ループ処理は一度も実行されません。
Do ~ Loop Until ステートメント
指定した条件が有効になるまで処理を繰り返します。このステートメントは、条件を後判断するため、繰り返し実行する処理を行った後に条件を判断します。条件式にかかわらず、必ず一度はループ処理を行ってから条件を判断します。
Do 繰り返す処理 Loop Until 条件式
(例)
i = 3 Do MsgBox i & "!" i = i - 1 Loop Until i <= 0
処理は先ほどのDo Until…Loopステートメントと同じ動作を行います。しかし、i = 3のところをi = 0に置き換えると「0!」とメッセージが表示された後に条件式と比較します。条件式が有効、無効に関わらず必ず1度はループ処理が行わることになります。
Do While ~ Loop ステートメント
指定した条件が有効である間処理を繰り返します。このステートメントは、条件を前判断するため、繰り返し実行する処理を行う前に条件を判断します。条件式によっては一度もループに入らずに処理を終了することがあります。
Do While 条件式 繰り返す処理 Loop
(例)
i = 1 Do While i < 3 MsgBox i & "!" i = i + 1 Loop
条件式はカウンタ変数iが3より小さい間は処理を繰り返すことになります。最初は「1」が代入され「1!」と表示され、次に1が加算されて処理を繰り返します。次は、iが2となっているので、条件を満たしているのでループ処理を行います。カウンタ変数iに「3」が代入されると条件を満たさなくなるので、繰り返し処理は終了します。これも前判断なので、最初からiに3が代入されていると条件を満たさないので、一度も処理を行いません。
Do ~ Loop While ステートメント
指定した条件が有効である間処理を繰り返します。このステートメントは、条件を後判断するため、繰り返し実行する処理を行った後に条件を判断します。条件式にかかわらず、必ず一度はループ処理を行ってから条件を判断します。
Do 繰り返す処理 Loop While 条件式
(例)
i = 1 Do MsgBox i & "!" i = i + 1 Loop While i < 3
処理は先ほどのDo While…Loop ステートメントと同じ動作を行います。しかし、i = 1のところをi = 3に置き換えると「3!」とメッセージが表示された後に条件式と比較します。条件式が有効、無効に関わらず必ず1度はループ処理が行わることになります。
※ Do文のループを強制的に抜けるには「Exit Doステートメント」を記述します。
Do 繰り返す処理 Exit Do Loop
処理の繰り返し - For文
For文は指定された回数だけ繰り返し処理を行います。
For ~ Next ステートメント
繰り返す回数があらかじめ決まっているのであれば、For~Nextステートメントを使うと便利です。
For カウンタ変数=初期値 To 最終値 [Step 増減値] 繰り返す処理 Next [カウンタ変数]
カウンタ変数の値には、最初「初期値」が代入され、繰り返す処理が実行されるたびに、カウンタ変数の値は増減値で指定された数だけ、自動的に増減されます。但し、省略されている場合は1加算されます。そして、カウンタ変数の値が最終値より大きくなると、繰り返しの処理が終了します。
(例)
Dim i As Integer Dim mySum As Integer mySum = 0 For i = 1 To 5 mySum = mySum + i Next i MsgBox mySum
1から5までの数値を足していく処理です。結果は、「15」と表示されます。
For Each ~ Next ステートメント
コレクションの各要素に対して処理を繰り返します。コレクションとは、同じ種類のオブジェクトの集合のことです。例えば、フォーム上に配置したコントロールのすべてを1つのコレクションとして扱うことができます。コレクションに対して共通の処理を行いたい場合に利用します。
For Each オブジェクト変数 In コレクション 繰り返す処理 Next
(例)
Dim DBname As AccessObject For Each DBname In CurrentData.AllTables MsgBox DBname.Name & " ": Next
カレントデータベースに含まれるすべてのテーブル名を表示させます。