PR

Access VBA 繰り返し処理を途中で抜ける Exitステートメント

VBA

Accessを用いて、業務効率を改善させようとした場合に、VBAで繰り返しの処理を実装する機会が出てきます。例えば、テーブル内のレコードを逐次確認して処理を分岐させてみたり、フォーム上の各コントロールの値を取得しながら処理をしたりと、その用途は多岐に亘ります。

繰り返し処理としては、For文やDo loop文等が挙げられますが、これらの繰り返し処理を用いた際に、ある条件に至ったときは繰り返し処理から抜け出すための方法としてExitステートメントが用意されています。

今回は、具体例も交えてExitステートメントの使用方法を見ていきましょう。

スポンサーリンク

Exitステートメントについて

冒頭で、繰り返し処理から抜け出すためにExitステートメントが用意されているとお伝えしましたが、実は、繰り返し処理の種類によってExitステートメントの記載方法が若干異なります。

まず、Do loop文については、処理から抜け出したいところに「Exit Do」と記載することで、繰り返し処理から抜け出すことができます。

次に、For Next文(For Each Next文)に対しては「Exit For」と記載します。

Do loop文: Exit Do
For Next文/For Each Next文: Exit For

それでは、具体例から処理の様子を見ていきましょう。VBAで標準モジュールを作成し、以下に示すコードを追記していきます。ここで、モジュールの作成方法は以下の記事で紹介していますので、併せてご確認ください。

(実際にはDo loop文、For文は条件を上手く設定してあげれば、Exitステートメントを使うまでもないのですが、ここでは簡単な説明のためにExitステートメントを使っていることをご了承ください。)

Public Sub Exit_Do_Statement()

Dim i As Integer
i = 1
  
'iが10になるまで処理を繰り返す
Do Until i = 10

  'イミディエイトウィンドウにiの値を表示する。
  Debug.Print i

  'もしiの値が5であれば、繰り替え処理から抜け出す。
  If i = 5 Then
    Exit Do
  End If

  'iに1を加える。
   i = i + 1
  
Loop

End Sub

一つ目のサンプルはDo loop文から抜け出す処理を記述しています。コードを記入後、実行してみてください。すると、イミディエイトウィンドウに図1のような結果が得られたと思います。

図1 Exit Doによる中断処理結果

Do loop文において「Until」を用いて変数iが「10」になるまで処理を繰り返す条件としましたが、それよりも先に処理が中断されています。これは、繰り返し処理中に記載したIf文において、変数iの値が「5」となった段階で「Exit Do」が実行されたため、繰り返し処理から抜け出したことを示しています。

Public Sub Exit_For_Statement()
 
'iが10になるまで処理を繰り返す
For i = 1 To 10

  'イミディエイトウィンドウにiの値を表示する。
  Debug.Print i

  'もしiの値が5であれば、繰り替え処理から抜け出す。
  If i = 5 Then
    Exit For
  End If
  
Next

End Sub

二つ目のサンプルはFor文から抜け出す処理を記述しています。コードを記入後、実行してみてください。すると、イミディエイトウィンドウに図2のような結果が得られたと思います。

図2 Exit Forによる中断処理結果

For文についても、変数iが「10」になるまで処理を繰り返す条件としましたが、それよりも先に処理が中断されています。これは、Do loop文で紹介した際の処理内容と同じで、繰り返し処理中に記載したIf文において、変数iの値が「5」となった段階で「Exit For」が実行されたため、繰り返し処理から抜け出したことを示しています。

スポンサーリンク

Exitステートメントの活用方法

さて、ここまででExitステートメントの使い方として、単純な1重の繰り返し処理での方法を紹介してきましたが、実は、2重の繰り返し処理からの抜け出しにExitステートメントが活用できます。

具体的な例として以下のコードを見ていきましょう。これは、変数iに対し、変数jを乗じその値をイミディエイトウィンドウに表示するという処理です。

Public Sub Double_loop_Exit_Statement()
Dim i As Integer, j As Integer

'iが5になるまで処理を繰り返す
For i = 1 To 5
  j = 5
  Do
    'もしiとjの積が20を超えたら、繰り替え処理全体から抜け出す。
    If i * j > 20 Then
      Exit For
    End If

  'iとjの積をイミディエイトウィンドウに表示する。
  Debug.Print "i: " & i & " とj: " & j & "の積は…" & i * j
  
  j = j + 1
  
  'jが10になったらDo loopから抜け出す。(For文に戻る。)
  Loop Until j = 10
 
Next

End Sub

図3 2重ループからの抜け出し処理

この処理を実行すると、イミディエイトウィンドウに図3の結果が得られますが、変数iが「3」のところまでの処理で中断されています。この例でいうと、「Exit For」が実行される条件は、変数iとjの積が「20」を超えた場合としていました。つまり、変数i=3、j=7の場合に「21」となりIf条件がTrueとなる「20」を超えたために、For文の繰り返し処理から抜け出したことになります。

もうお分かりかと思いますが、この例で重要な点は、Do loop文の中で「Exit For」を使っているという点です。このように、2重の繰り返し処理をしている場合に、内部の繰り返し処理から一足飛びで処理を抜け出すときには上述の方法が活用できるわけです。

まとめ

今回は繰り返し処理から途中で抜け出す方法として、Exitステートメントについて紹介しました。特に、多重にデータを処理する際にループ処理を多用することになりますが、単純に終了条件を設定できない場合に、スポットでExitステートメントを活用することもできます。

Exitステートメントによりデータ処理を効率よく行うための処理が実装できますので、この機会に使用方法を確認していただければと思います。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました