データ処理作業を行う際、決まった方式に基づく入力等ルーチン業務の場合に、Access VBAによる繰り返し処理は非常に有効な手法となります。
例えば繰り返し処理として、次のような作業が考えられます。
・全レコードを1つずつ確認して条件にあったレコードだけを抽出する。
・ファイルの有無を確認して、同一ファイルが存在する場合はリネームする。
その他にも繰り返し処理の用途は多々ありますが、今回は繰り替えし操作のソースコードについて記載方法を紹介していきます。なお、ソースコードの記載方法までの操作は以下の記事をご参照ください。
While文について
While文は指定した条件がTrueの場合に、処理を繰り返します。
While 条件
処理内容
Wend
例として、次のようなソースコードを記載してみましょう。
Sub While_Sample() Dim i As Integer: i = 1 While i <= 10Debug.Print i
i = i + 1
Wend End Sub
ここで、Debug.PrintはVBA画面のイミディエイトウィンドウに結果を表示するコードです。今回の場合は、変数「i」の値を表示します。上のコード内容は、変数iの初期値を「1」とし、iの値が10以下の間は処理を繰り返すため、イミディエイトウィンドウには1~10の値が表示されます。
また、繰り返し処理をする際に、条件として用いている変数「i」は必ずインクリメントをしてください。この記述を書き忘れると、いつまでたっても変数「i」が10を超えることがなく、永遠と処理をし続けることになります。
上記のソースコードでは、まず変数「i」に1を代入し、その後、Debug.Printによりイミディエイトウィンドウに変数「i」に格納されている数字の「1」が表示されます。そして、変数「i」をインクリメントして再度Debug.Printの処理に戻ります。この繰り替えし処理を、変数「i」が10を超えるまで続けるため、イミディエイトウィンドウには1~10の値が表示されます。条件がFalseになった段階で、繰り返しの操作から脱して、処理が終了となります。
Do loop文について
Do loop文はある条件に至るまで、指定した処理を繰り返すソースコードとなり、記載方法が次の条件に応じて異なります。
・条件の判定が、処理を実行する前(前判断)か後(後判断)かで分類されます。
後判断は必ず処理が1回は実行されますが、前判断の場合は、条件が
・条件がTrueの場合に処理をするか、Falseの場合に処理をするかで分類されます。
パターン①: 前判断・Trueで処理
Do While 条件式
処理内容
Loop
パターン②: 後判断・Trueで処理
Do
処理内容
Loop While 条件式
パターン③: 前判断・Falseで処理
Do Until 条件式
処理内容
Loop
パターン④: 後判断・Falseで処理
Do
処理内容
Loop Until 条件式
前判断と後判断の違いを簡単に示すためのソースコードを以下に示します。
Sub Do_Sample() Dim i As Integer: i = 1 '後判断の場合、Loopの後ろに条件式を記載 DoDebug.Print i
'実行される。i = i + 1
Loop Until i <= 2 End Sub
Sub Do_Sample() Dim i As Integer: i = 1 '前判断の場合、Doの後ろに条件式を記載 Do Until i <= 2Debug.Print i
'実行されない。i = i + 1
Loop End Sub
一見、似たような内容ですが、上の場合は後判断のため、必ずDebug.Printが1回は行われ、変数「i」の値(この場合は1)がイミディエイトウィンドウに表示されます。一方で、下の場合は前判断となり条件式を満たしているため、Debug.Printの処理が行われず、何も表示されないことになります。
このように、必要に応じて判定基準と判断の位置を設定するように調整してください。
For文について
For文にはFor NextとFor Eachの2種類の構文があります。
For Next文は指定した回数かつStep分だけ、繰り返し処理する場合に用い、次のように記載できます。
For インデックス = 初期値 To 終了値 Step 間隔
処理内容
Next
※ 「Step 間隔」は省略可能、省略時は「1」ずつインクリメントする。
具体的なソースコードの例を以下に示します。
Sub For_Sample() Dim i as Integer 'iの値が1から5まで2つずつ加算して処理する。 For i = 1 To 5 Step 2 Debug.Print i Next End Sub
この場合、イミディエイトウィンドウには「1、3、5」が表示されます。
一方、For Each文は指定された範囲の全てを繰り返し処理する場合に用い、次のように記載できます。
For Each 要素 In 対象
処理内容
Next
具体的なソースコードの例を以下に示します。
Sub For_Sample() Dim i as Variant 'For_Each文の要素はVariant型にする。 Dim list(2) as Integer '配列の宣言 list(0) = 0 list(1) = 1 list(2) = 2 'listの各値をそれぞれ出力処理する。 For Each i In list Debug.Print i Next End Sub
この場合、イミディエイトウィンドウには「0、1、2」が表示されます。
まとめ
今回、Access VBAの制御文として繰り返し処理について紹介をしました。業務効率を向上させる際に、ルーチン作業の自動化は非常に有効な手立てとなりますので、紹介したソースコードを応用していただければと思います。
スポンサーリンク
コメント