繰り返し処理 – VBAプログラムの反復構造

VBAでは、反復構造を使用して同じコードを反復で実行します。反復回数は、特定の回数または特定の条件によって制御されます。

ループプロシージャで特定の変数を制御することにより、反復構造は複雑なループプロシージャを実行できます。

反復構造の流れは、次のようになります。

VBA反復構造の種類

VBAには3つの種類の反復構造があります。それらは次のとおりです。

  • Forループ
  • Do While, ループ条件を満たしている間は繰り返す。
  • Do Until, ループ条件を満たしている間は繰り返す。

3種類の反復構造の構文と使い方を次に説明します。

Forループ

Forループは常用なループ型であり、次の2つの形式があります。

  • For … Nextループ
  • For Eachループ

For … Nextループ

For … Nextループを使用して、コードを指定された回数でループします。 Forループは数値変数を使用します。初期値から始まり、ループのたびに変数の値が増減し変数の値が指定された終了値と等しくなるまで、ループが終了します。

For … Nextのループ構文は次のとおりです。

For [変数] = [初期値] To [終了値] Step [間隔???]
'これがループで実行されるステートメントです
Next

その中:

  • [変数]は、ループで実行されるステートメントで使用できる数値変数です。
  • [初期値]と[終了値]固定された数値
  • [増分]ループするたびの変数の増分です。 正数の値の場合、変数は増します。負数の値の場合、変数は減ります。

1から10までの総和をだすための例を見てください。

Sub MyCode()

Dim i As Integer
Dim sum As Integer

For i = 1 To 10 Step 1
sum = sum + i
Next

End Sub

ご覧のとおり、Forループはi変数を使用して10回ループし、iの値は1から10へと変化します。

ForループのStep値が1の場合、キーワードのStepを省略できることに注意すべきです。上記のプロシージャにあるループの部分は、次のように記述できます。

For i = 1 To 10
sum = sum + i
Next

For Eachループ

For Eachループは、データコレクション内のすべての要素を1つずつ経るために使用されます。 データコレクションには、配列、Excelオブジェクトコレクション、辞書などが含まれます。

For Eachループには数値変数は必要ありませんが、データコレクションの要素と同じデータ型の変数が必要です。 基本的な構文は次のとおりです。

For Each [要素] In [要素コレクション]
'ループで実行のコード
Next [要素]

その中:

  • [要素]は、コレクション内の要素と同じデータ型の変数であり、ループコードで使用できます。
  • [要素コレクション]複数の要素のコレクションです。

次の例をご覧ください。ワークブック内のすべてのワークシートの名前をループで出力します。

Sub MyCode()

Dim sh As Worksheet

For Each sh In Worksheets
Debug.Print sh.Name
Next sh

End Sub

sh変数は要素変数であり、Worksheetsはワークブック内のすべてのワークシートのコレクションです。

Exit For ステートメント

Exit Forステートメントは、ループプロシージャからジャンプするために使用されます。通常、ループを早期に終了するときに使用されます。これは、For NextループとFor Eachループ、両方にも適用できます。

次の例をご覧ください。1から10までの総和をだすとき、総和が30より大きくなると、ループが停止します。

Sub MyCode()

Dim i As Integer
Dim sum As Integer

For i = 1 To 10
sum = sum + i
If sum > 30 Then
Exit For
End If
Next

End Sub

このコードでは、sum変数が30より大きい場合、ループは停止します。

Do Whileループ

Do Whileループは、指定された条件が満たされたときにコードの一部をループするために使用されます。 指定されたループの条件は、Whileキーワードの後に記述します。

Do Whileループも二つの形式があります。

  • Do While … Loopループ
  • Do … Loop Whileループ

Do While … Loopループ

Do While … Loopループ。Whileキーワードの後の条件式の値に従って、trueの場合に実行され、falseの場合に停止します。 基本的な構文は次のとおりです。

Do While [条件式]
'ループコード
Loop

その中で、[条件式]が真である限り、ループのままで実行されます。 [条件式]はfalseになるとループが停止し、Loopキーワードの後にプログラムが実行されます。

次の例をご覧ください。上記と同じ1から10までの総和をだすものです。

Sub MyCode()
Dim i As Integer
Dim sum As Integer
i = 1
Do While i <= 10
sum = sum + i
i = i + 1
Loop
'繰り返し処理終了
End Sub

i変数の初期値は1です。Whileの後の条件に従って、i変数が10または10以下である限り、後のコードをループで実行できます。

ここでは、説明するためにDo Whileループを使用しました。実際、総和をだす場合にはForループのほうがシンプルです。

Do … Loop Whileループ

上記のDoループとは異なり、Do … Loop Whileループは、条件式の値を判断する前に、コードを少なくとも1回に実行します。 基本的な構文は次のとおりです。

Do
'ループコード
Loop While [条件式]

その中で、Whileおよび条件式はLoopキーワードの後に記述されます。

Exit Doステートメント

Exit Forステートメントと同じ、Exit DoステートメントはDo Whileループからジャンプするために使用されます。

Do Untilループ

Do UntilループはDo Whileループに似ています。相違点は、Do Whileの条件式がtrueの場合、ループを実行し続け、Do Untilの条件式がtrueの場合、ループを停止します。

Do Untilループの二つの形式があります。

  • Do Until … Loop ループ
  • Do … Loop Until ループ

Do Until … Loopループ

ループが開始する前に、後の条件式の値を判断し、trueの場合はループを停止し、falseの場合はループの実行を続行します。 基本的な構文は次のとおりです。

Do Until [条件式]
'ループコード
Loop

Do … Loop Untilループ

一度実行し、Untilの後に条件式の値を判断します。trueの場合はループを停止し、falseの場合はループの実行を続行します。 基本的な構文は次のとおりです。

Do
'ループコード
Loop Until [条件式]

他の使用方法は、Do Whileループと同じです。

まとめ

この記事では、VBAのプログラムループ構造の基礎と様々なループ構造の形式について勉強しました。 サブクラスを含め、VBAで一般的に使用されるループ構造には6つの種類があります。

ループ構造説明
For … Nextループ 指定された回数でループを実行する
For Eachループ データコレクション内のすべての要素を1つずつ経る
Do While … Loopループ 条件がTrueの場合、ループで実行する
Do … Loop Whileループ 条件がTureの場合、ループで実行する。 条件がtrueまたはfalseに関係なく、少なくとも1回に実行する
Do Until … Loopループ 条件がTureになるまで、ループで実行する
Do … Loop Untilループ 条件がTureになるまで、ループで実行する。条件がtrueまたはfalseに関係なく、少なくとも1回に実行する

そして、ループからジャンプする2種類のステートメントを説明しました。

ジャンプするステートメント说明
Exit For Forループからジャンプする
Exit Do Do While/Untilループからジャンプする

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です