VBA を使用して配列で for Each を使用する
VBA には 2 種類の For ループがあります。
For EachループFor To Nextループ
この記事では、配列での For Each ループの使用について説明します。 この記事では、For To Next ループに関連する例も提供されています。
VBA を使用して配列で For Each を使用する
例 1:
配列に対して For Each ループを反復するには、次の構文を使用できます。
Public Sub sampleProgram()
Dim arr(7) As String
Dim element As Variant
For Each element In arr
func1 element
Next element
End Sub
Sub func1(ByVal ele As String)
End Sub
コードは圧倒されるかもしれません。 ただし、各ステートメントを正確に理解できるように、以下で説明しています。
配列に対して For Each ループを使用して反復するには、最初に配列を宣言することが不可欠です。 任意のデータ型の配列を宣言できます。 この例では、配列 arr は 7つの要素を持つ文字列として宣言されています。
配列が For Each の反復子として機能するために、変数 element は Variant 型として宣言されます。 element 変数は、配列 arr から値を取得し、配列を反復処理する反復子として使用されます。
ループ内では、サブルーチン func1() が使用されます。このサブルーチンは、配列 arr の反復要素をパラメーターとして受け取ります。 element は、For Each ループの反復子として機能するため、Variant データ型です。
element がパラメーターとして func1() に渡される場合、func1() が Variant 型パラメーターを受け入れることを確認する必要があります。 このために、次の 2つのことを行うことができます。
- 上記の例で定義されているように、パラメーターを値で受け取るサブルーチンを作成します
ByVal ele As String. - それ以外の場合は、サブルーチンに渡す前に
Variantを String データ型に変換します。elementを String データ型に変換するためのコード スニペットを次に示します。
func1 CStr(element)
コード例の func1() は、各配列値に対する For Each ループで呼び出されるサブルーチンです。 ダミーとして、このサブルーチンはユーザーに対して空に保たれています。
実行する必要がある作業を取り込むことができます。 それ以外の場合は、For Each ループでサブルーチン呼び出しを省略することもできます。
例 2:
2 番目の例では、上記で説明した For Each ループの代替として、For To Next ループについて説明します。
For Each ループは、オブジェクトのコレクションを中心に構成されています。 最初の例で説明したように、Variant データ型変数またはオブジェクトがループの反復子として使用されます。
さらに、関数を使用する場合は、Variant 型のパラメーターを受け入れる必要があります。
For To Next ループの動作は異なります。; 配列の上限と下限を利用します。 さらに、Integer 型の変数を使用してループを繰り返します。これは、配列のすべての要素にアクセスするためにも使用できます。
コード スニペットを次に示します。
Public Sub sampleProgram()
Dim arr(7) As String
Dim i As Long
For i = LBound(arr) To UBound(arr)
func1 arr(i)
Next i
End Sub
配列は sampleProgram() でデータ型 String の arr として宣言されています。 反復子 i はデータ型 Long で宣言され、配列を反復処理します。
前に説明したように、配列の下限と上限は特定の関数を使用して計算されます。 For To Next ループは、定義された回数反復し、各反復でサブルーチン func1() を呼び出します。
特定の配列要素 arr(i) の値は、パラメーターとして func1() に渡されます。 したがって、Variant データ型に問題はありません。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub