トップ > スキル : アプリケーション > VBA for Access > 応用編(VBA基礎知識)

VBA_Access

命令構文(ステートメント)2

処理の繰り返し

同じ処理を何度も繰り返し実行する場合、決まった書式にしたがって記述するだけで実現できます。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
    

カレントデータベースに含まれるすべてのテーブル名を表示させます。