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 | ループからジャンプする |
コメントを残す