Excel/VBA

TOP

Arrayの使い方と配列の活用例

Arrayの使い方の説明画像です

Arrayの使い方

Array関数とは、配列の中に複数の要素を入れることにより、特定の要素を取り出したりすることができます。 仮に下記のように、テスト1・テスト2・テスト3という値をArray関数に格納しようとすると下記のようになります。


Dim arr As Variant
arr = Array("テスト1", "テスト2", "テスト3")
        

まずはVariant型の変数を用意し、文字列や数値などをArray関数の中に格納します。

Array関数内の要素を取り出すには、下記のようにインデックス番号(0から始まる数字)を指定して要素を取り出します。


Dim arr As Variant
arr = Array("テスト1", "テスト2", "テスト3")

Debug.Print arr(0)   '出力結果 テスト1
Debug.Print arr(1)   '出力結果 テスト2
Debug.Print arr(2)   '出力結果 テスト3
        

上記のように、Array("テスト1", "テスト2", "テスト3")とした場合、「テスト1」を取り出すにはインデックス番号を指定するため、arr(0)とすることで「テスト1」という値を取り出すことができます。

ここで注意すべき点は、最初の要素を取り出すときは、arr(1)と指定するのではなく、arr(0)と指定するようにします。

配列操作時は、0から始まる数字を使用するという事を覚えておきましょう。
※直接、要素数を指定した場合はその限りではありません。


Arrayの要素をForでループして出力する

Arrayに格納した要素は、For文でループして要素の全てを取り出すことができます。

ループして配列から要素を取り出すには、配列の最小要素数と最大要素数を取得する必要があります。下記のように最小要素数を取得するにはLBound、最大要素数を取得するにはUBoundを使用します。


Dim arr As Variant
arr = Array("テスト1", "テスト2", "テスト3")

Debug.Print LBound(arr)  '出力結果 0
Debug.Print UBound(arr)  '出力結果 2
        

取得した最小要素数と最大要素数を元にFor文でループを行い、配列内の用を取り出します。下記のサンプルコードのように、最小要素数から最大要素数までを繰り返して結果を出力します。

サンプルコード


Sub 配列の使い方()

    Dim arr As Variant
    arr = Array("テスト1", "テスト2", "テスト3")
    
    Dim LoopArr As Long
    For LoopArr = LBound(arr) To UBound(arr)
        Debug.Print arr(LoopArr)
    Next LoopArr
    
End Sub
        

上記のサンプルコードを実行すると、イミディエイトウィンドウには下記のように出力されます。

Arrayの使い方の説明画像です

Arrayの活用例

Array関数は様々な場面で活用できますが、こちらではArray関数を活用させる一例をお伝えします。

下記のように、別シートからデータを転記する処理を実装するとします。
※下記のデータは架空のサンプルデータです。

Arrayの使い方の説明画像です

Arrayを使用せずに1列ずつ転記していく場合、通常は下記のようにA・B・C列それぞれの転記処理を記述しなければなりません。


Sub Array活用例()
    
    Dim WsSource As Worksheet
    Dim WsTarget As Worksheet
    
    Set WsSource = ThisWorkbook.Worksheets("転記元")   '転記元のシートを指定しています
    Set WsTarget = ThisWorkbook.Worksheets("転記先")   '転記先のシートを指定しています
    
    '転記元シートの2~11行目のA~C列のデータを転記先のシートに1列ずつ転記しています
    WsTarget.Range(WsTarget.Cells(2, "A"), WsTarget.Cells(11, "A")).Value = WsSource.Range(WsSource.Cells(2, "A"), WsSource.Cells(11, "A")).Value
    WsTarget.Range(WsTarget.Cells(2, "B"), WsTarget.Cells(11, "B")).Value = WsSource.Range(WsSource.Cells(2, "B"), WsSource.Cells(11, "B")).Value
    WsTarget.Range(WsTarget.Cells(2, "C"), WsTarget.Cells(11, "C")).Value = WsSource.Range(WsSource.Cells(2, "C"), WsSource.Cells(11, "C")).Value
    
End Sub
        

上記のように、1列ずつ転記処理を記述すると、転記する列が増えるとさらにコードが長くなってしまい、メンテナンスをする際に非常に手間になってしまいます。

上記では転記する処理「WsTarget.Range(WsTarget.Cells(2, "A"), WsTarget.Cells(11, "A")).Value = WsSource.Range(WsSource.Cells(2, "A"), WsSource.Cells(11, "A")).Value」を3回記述しておりますが、Arrayに列番号を格納することによって、転記する処理を3回記述している箇所を1回で済ませることができます。


Sub Array活用例()

    Dim WsSource As Worksheet
    Dim WsTarget As Worksheet
    Dim ColArr As Variant
    
    Set WsSource = ThisWorkbook.Worksheets("転記元")   '転記元のシートを指定しています
    Set WsTarget = ThisWorkbook.Worksheets("転記先")   '転記先のシートを指定しています
    
    '転記する列番号をArrayに格納します
    ColArr = Array("A", "B", "C")
    
    'Arrayに格納された要素を繰り返し、列番号を指定する箇所にArrayで取り出した列番号を入れています
    Dim LoopArr As Long
    For LoopArr = LBound(ColArr) To UBound(ColArr)
        WsTarget.Range(WsTarget.Cells(2, ColArr(LoopArr)), WsTarget.Cells(11, ColArr(LoopArr))).Value = _
        WsSource.Range(WsSource.Cells(2, ColArr(LoopArr)), WsSource.Cells(11, ColArr(LoopArr))).Value
    Next LoopArr
    
End Sub
        

上記のように、Arrayに列番号を格納することによって転記する処理の箇所を1行で済ませることが出来ました。

仮に、転記する箇所が増えた場合は、下記のようにArrayに列番号を追加するだけでメンテナンスは完了します。


Sub Array活用例()

    Dim WsSource As Worksheet
    Dim WsTarget As Worksheet
    Dim ColArr As Variant
    
    Set WsSource = ThisWorkbook.Worksheets("転記元")   '転記元のシートを指定しています
    Set WsTarget = ThisWorkbook.Worksheets("転記先")   '転記先のシートを指定しています
    
    '転記する列番号をArrayに格納します
    ColArr = Array("A", "B", "C", "D", "E")  '←D列とE列を追加しています
    
    'Arrayに格納された要素を繰り返し、列番号を指定する箇所にArrayで取り出した列番号を入れています
    Dim LoopArr As Long
    For LoopArr = LBound(ColArr) To UBound(ColArr)
        WsTarget.Range(WsTarget.Cells(2, ColArr(LoopArr)), WsTarget.Cells(11, ColArr(LoopArr))).Value = _
        WsSource.Range(WsSource.Cells(2, ColArr(LoopArr)), WsSource.Cells(11, ColArr(LoopArr))).Value
    Next LoopArr
    
End Sub
        

まとめ

以上がArrayの使い方と活用例でした。

Array関数を使用することで、複数のデータを1つの変数で管理できるため、コードの可読性とメンテナンス性が向上します。特に、データが固定されている場合や小規模な配列を作成する場合に非常に有効です。

もし、普段の実装業務で活用できそうな場面がありましたら、積極的に使用してみることをお勧めします。

関連記事