VBA を使用して配列で for Each を使用する

Bilal Shahid 2023年6月21日
VBA を使用して配列で for Each を使用する

VBA には 2 種類の For ループがあります。

  1. For Each ループ
  2. 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 の反復子として機能するために、変数 elementVariant 型として宣言されます。 element 変数は、配列 arr から値を取得し、配列を反復処理する反復子として使用されます。

ループ内では、サブルーチン func1() が使用されます。このサブルーチンは、配列 arr の反復要素をパラメーターとして受け取ります。 element は、For Each ループの反復子として機能するため、Variant データ型です。

element がパラメーターとして func1() に渡される場合、func1()Variant 型パラメーターを受け入れることを確認する必要があります。 このために、次の 2つのことを行うことができます。

  1. 上記の例で定義されているように、パラメーターを値で受け取るサブルーチンを作成します ByVal ele As String.
  2. それ以外の場合は、サブルーチンに渡す前に 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() でデータ型 Stringarr として宣言されています。 反復子 i はデータ型 Long で宣言され、配列を反復処理します。

前に説明したように、配列の下限と上限は特定の関数を使用して計算されます。 For To Next ループは、定義された回数反復し、各反復でサブルーチン func1() を呼び出します。

特定の配列要素 arr(i) の値は、パラメーターとして func1() に渡されます。 したがって、Variant データ型に問題はありません。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

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

関連記事 - VBA Array