For Each…Next ステートメントは、Excel VBAにおいて、反復処理を行うための非常に重要なステートメントです。
このステートメントを使用することで、配列、コレクション、範囲などのオブジェクト内の各要素に順番にアクセスすることができます。
For Each…Next ステートメントとは
For Each…Next ステートメントは、配列、コレクション、範囲などのオブジェクト内の要素に対して反復処理を行うために使用されるステートメントです。
このステートメントを使用することで、オブジェクト内の要素にアクセスするために、配列の添字や、範囲のセル番号を指定する必要がありません。
For Each…Next ステートメントの構文
For Each…Next ステートメントの構文は以下のようになります。
1 2 3 |
For Each [要素] In [オブジェクト] [処理] Next [要素] |
この構文の中で、[要素]
はオブジェクト内の要素を表し、[オブジェクト]
は反復処理を行う対象のオブジェクトを表します。[処理]
は、各要素に対して行う処理を記述します。
この構文の中で、[要素]
はオブジェクト内の要素を表し、[オブジェクト]
は反復処理を行う対象のオブジェクトを表します。[処理]
は、各要素に対して行う処理を記述します。
For Each…Next ステートメントでの反復処理の例
以下は、For Each…Next ステートメントを使用して、配列内の要素を順番に表示する例です。
1 2 3 4 5 6 7 8 9 |
Dim myArray(2) As Integer myArray(0) = 1 myArray(1) = 2 myArray(2) = 3 Dim element As Integer For Each element In myArray MsgBox element Next element |
この例では、myArray
という配列内の要素を順番に表示するために、For Each…Next ステートメントを使用しています。element
という変数には、myArray
内の要素が順番に代入されます。
For Each…Next ステートメントでの処理の早め方
For Each…Next ステートメントを使用する場合、各要素に対して行う処理が完了するまで、次の要素に進めません。しかし、場合によっては、反復処理を途中で終了することができます。これにより、処理時間を短縮することができます。
以下は、For Each…Next ステートメントでの処理の早め方の例です。この例では、要素が3つ以上の場合に、処理を途中で終了するように設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Dim myArray(4) As Integer myArray(0) = 1 myArray(1) = 2 myArray(2) = 3 myArray(3) = 4 myArray(4) = 5 Dim element As Integer For Each element In myArray If element >= 3 Then Exit For End If MsgBox element Next element Dim myArray(4) As Integer myArray(0) = 1 myArray(1) = 2 myArray(2) = 3 myArray(3) = 4 myArray(4) = 5 Dim element As Integer For Each element In myArray If element >= 3 Then Exit For End If MsgBox element Next element |
この例では、myArray
内の要素が3つ以上の場合に、For Each…Next ステートメントを使用して、3
以上の要素が出現するまで、要素を順番に表示します。
要素が3
以上の場合、Exit For
ステートメントにより、処理を途中で終了します。
For Each…Next ステートメントでのエラー処理
For Each…Next ステートメントを使用する際には、要素が存在しない場合や、要素のデータ型が異なる場合などのエラーが発生する可能性があります。これらのエラーに対処するために、エラー処理を行うことができます。
以下は、For Each…Next ステートメントでのエラー処理の例です。この例では、要素のデータ型が異なる場合に、エラー処理を行っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Dim myArray(2) As Variant myArray(0) = 1 myArray(1) = "2" myArray(2) = 3 Dim element As Variant For Each element In myArray On Error Resume Next If IsNumeric(element) Then MsgBox element Else MsgBox "要素のデータ型が異なります。" End If On Error GoTo 0 Next element |
この例では、myArray
内の要素が異なるデータ型である場合に、エラー処理を行うために、On Error
ステートメントを使用しています。要素が数値である場合には、その値を表示し、それ以外の場合には、エラーメッセージを表示しています。
以上が、For Each…Next ステートメントについての説明となります。For Each…Next ステートメントを使用することで、配列、コレクション、範囲などのオブジェクト内の要素に対して、簡単に反復処理を行うことができます。
サンプルコード
配列の全要素に処理を行う
配列内の全要素に対して処理を行うために、For Each…Next ステートメントを使用することができます。
1 2 3 4 5 6 7 8 9 |
Sub increaseValues() Dim myRange As Range Set myRange = Range("A1:C3") Dim cell As Range For Each cell In myRange cell.Value = cell.Value + 1 Next cell End Sub |
このコードは、範囲 A1:C3
内の全てのセルに対して、セルの値を1増やす処理を行います。
具体的には、myRange
変数に A1:C3
の範囲を指定し、For Each
ステートメントを用いて、myRange
内の各セルに対して、そのセルの値に1を加えて更新します。
コメント