VBA Array関数の使い方徹底解説!1次元配列・2次元配列の操作をマスターしよう

当ページのリンクには広告が含まれています。
Array関数とは?

「VBAで配列の要素数を簡単に取得したいけど、どうやるんだろう?」
このように悩んだことはありませんか?


・複数のデータを一度に扱いたい
 どうやって配列を簡単に作成するんだろう?

VBAで2次元配列を簡単に作って、
 データを効率的に管理できたらいいな。

配列をもっと簡単に使いこなしたい、追加や削除ってどうするの?

その場合は、VBAの「Array関数」を
使用すると解決します!


この記事では、Excel VBAの「Array関数」を使って配列を宣言する方法について詳しく説明します。

VBAの「Array」関数を使うと、複数の値を1つの配列にまとめて簡単に管理できます。
1行で配列を初期化できるため、データを効率的に扱えるのが特徴です。
また、他の関数と組み合わせることで、配列の操作や転送がスムーズになります。

基本的な使い方から実践的な応用例まで、初心者でもすぐに活用できるコピペ可能なコードを紹介しますので、ぜひ最後までご覧ください。


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度
目次

この記事を見て「できるように」なること

VBAの「Array関数」とは?

VBAの「Array」関数は、複数の値をまとめて1つの変数として管理するための「配列」を作成するための関数です。

これにより、1つ1つの変数を個別に宣言せずに、複数のデータを1つの変数として管理できます。

例えば、複数の数値や文字列を同時に扱いたい場合に便利です。

Array関数の宣言例
arr = Array(1, 2, 3, 4, 5)

VBAの「Array関数」の宣言方法をご紹介 | 1次元配列・2次元配列

Array関数の構成

Array関数の構成
設定解説
  • arglist (任意)
    • 配列に含めたい要素をカンマ区切りで指定します。
      これにより、複数の値を1つの配列としてまとめて扱うことが可能です。

      ※もし引数を省略した場合、空の配列が作成されます。

より詳しい情報は、Microsoft公式のArray 関数を参照してください。

Array関数で「1次元配列」の宣言方法とその使い方

1次元配列とは、データが1つの方向に並んでいる配列のことです。

VBAのArray関数を使えば、複数の値を簡単に1つの1次元配列としてまとめることができます。
これにより、データを個別に扱うのではなく、一括で管理できるため、コードがスッキリします。

以下の例で、基本的なVBAでの1次元配列の作成方法を確認しましょう。

1次元配列の宣言方法

Sub DeclareArray()
    Dim arr As Variant
    arr = Array(1, 2, 3, 4, 5)
End Sub

このコードは、「arr」を1次元配列として5つの数値を格納しています。

このコードでは、Array関数を使って1次元配列を作成し、5つの数値を格納しています。
配列のインデックスは「0」から始まるため、最初の要素にアクセスするにはarr(0)を使用します。

配列から要素を取り出す方法

次に、作成した配列から各要素を取り出して表示するコードを紹介します。

Sub ExtractArrayElements()
    Dim arr As Variant
    arr = Array(1, 2, 3, 4, 5)

    '// 配列の各要素を取り出して表示
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        Debug.Print "arr(" & i & ") = " & arr(i)
    Next i
End Sub
1次元配列の宣言で要素を取り出す方法

このコードでは、LBoundUBoundを使用して配列の範囲を決定し、ループで各要素を取り出してイミディエイトウィンドウに表示します。
arr(0)は1、arr(4)は5というように、それぞれの要素にアクセスできます。

Array関数で「2次元配列」の宣言方法とその使い方

2次元配列とは、データが行と列の2つの方向に並んでいる配列のことです。

VBAのArray関数を使えば、簡単に2次元配列を作成し、複数のデータを管理できます。
2次元配列は、Excelの表のように、行と列でデータを整理して扱えるため、より複雑なデータの処理に便利です。

以下の例で、基本的なVBAでの2次元配列の作成方法を確認しましょう。

2次元配列の宣言方法

1. Array関数を使用した2次元配列の作成
Sub DeclareTwoDimArray()
    Dim arr As Variant
    arr = Array(Array(1, 2, 3), Array(4, 5, 6))
End Sub

このコードでは、Array関数を使って2次元配列を作成しています。

この方法では、ネストされたArray関数を使用することで、複数の行を持つ配列を簡単に定義できます。
例えば、arr(0)(0)は「1」、arr(1)(2)は「6」にアクセスします。

2. 明示的にサイズを指定して2次元配列を作成 (Array関数を使用しない場合)
Sub DeclareTwoDimArrayWithDim()
    Dim arr(1, 2) As Long
    arr(0, 0) = 1
    arr(0, 1) = 2
    arr(0, 2) = 3
    arr(1, 0) = 4
    arr(1, 1) = 5
    arr(1, 2) = 6
End Sub

このコードは、2行3列の2次元配列を作成しています。要素は「0」から始まり、Excelのセル範囲のようにデータを格納できます。

配列から要素を取り出す方法

次に、作成した2次元配列から各要素を取り出して表示するコードを紹介します。

Sub ExtractTwoDimArrayElements()
    Dim arr As Variant
    arr = Array(Array(1, 2, 3), Array(4, 5, 6))

    '// 配列の各要素を取り出して表示
    Dim i As Long, j As Long

    For i = LBound(arr) To UBound(arr)   '// 行の範囲を決定
        For j = LBound(arr(i)) To UBound(arr(i))   '// 列の範囲を決定
            Debug.Print "arr(" & i & ", " & j & ") = " & arr(i)(j)
        Next j
    Next i
End Sub
2次元配列の宣言から要素を取り出す方法

このコードでは、Array関数を使って2次元配列を作成し、各要素を取り出してイミディエイトウィンドウに表示します。

  • arr(0)(0)は「1」、arr(1)(2)は「6」にアクセスできます。
  • LBound(arr)およびUBound(arr)で行の範囲を決定し、LBound(arr(i))およびUBound(arr(i))で列の範囲を決定してループ処理を行います。

これにより、Array関数を使って動的に生成された配列の要素を効率的に操作できます。

Array関数で作成した配列にデータを追加する方法

動的配列を使用してデータを追加

VBAのArray関数で作成した配列に新しい要素を追加するためには、ReDim Preserveを使用して、配列のサイズを拡張します。

ReDim Preserveは、既存のデータを保持しつつ、配列のサイズを変更できる方法です。

コード例:配列にデータを追加する

Sub AddElementToArray()
    '// 初期配列をArray関数で作成
    Dim arr As Variant
    arr = Array("A", "B", "C")

    '// 配列のサイズを拡張して要素を追加(既存データを保持)
    ReDim Preserve arr(UBound(arr) + 1)  '// 配列サイズを1つ拡張
    arr(UBound(arr)) = "D"  ' 新しい要素を追加

    '// 配列の各要素を表示
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        Debug.Print "arr(" & i & ") = " & arr(i)
    Next i
End Sub
配列にデータを追加した結果

コードの説明

このコードの解説
  1. Array("A", "B", "C")で3つの要素を持つ1次元配列を作成しています。
  2. ReDim Preserve arr(UBound(arr) + 1)で配列のサイズを1つ拡張しています。UBound(arr)は配列の最後のインデックスを返すため、+1で新しい要素を追加します。
  3. arr(UBound(arr)) = "D"で新しい要素「D」を追加しています。

この方法により、既存のデータを保持したまま、新しい要素を配列に追加することができます。

Array関数で作成した配列からデータを削除する方法

動的配列を使用してデータを削除

VBAのArray関数で作成した配列から要素を削除する場合も、直接の削除はできないため、削除したい要素を除いた新しい配列を作成し、元の配列を置き換える手法を使います。

コード例:配列からデータを削除する

Sub RemoveElementFromArray()
    '// 初期配列をArray関数で作成
    Dim arr As Variant
    arr = Array("A", "B", "C", "D")

    '// 削除したい要素(ここでは "B")のインデックスを見つける
    Dim i As Long, j As Long
    Dim newArr() As Variant
    ReDim newArr(0 To UBound(arr) - 1)  '// 新しい配列を1つ小さく作成

    j = 0
    For i = LBound(arr) To UBound(arr)
        If arr(i) <> "B" Then  '// 削除対象以外の要素を新しい配列にコピー
            newArr(j) = arr(i)
            j = j + 1
        End If
    Next i

    '// 元の配列を新しい配列に置き換える
    arr = newArr

    '// 新しい配列の各要素を表示
    For i = LBound(arr) To UBound(arr)
        Debug.Print "arr(" & i & ") = " & arr(i)
    Next i
End Sub
配列からデータを削除した結果

説明

このコードの解説
  1. Array("A", "B", "C", "D")で4つの要素を持つ配列を作成しています。
  2. 削除対象である「B」以外の要素を新しい配列newArrにコピーしています。
  3. ReDim newArr(0 To UBound(arr) - 1)で、新しい配列を元の配列より1つ小さいサイズで作成します。
  4. 最終的に、元の配列を新しい配列newArrに置き換えます。

この方法で、指定した要素を削除した新しい配列を作成できます。


ReDim Preserveについては、別の記事で詳しく解説を行っています。ぜひご覧ください。

あわせて読みたい
Excel VBA 動的配列の基本:宣言方法からReDimによるサイズ変更までを解説 「VBAでデータの量が不確定な場合、どうやって配列を使用したらいいんだろう…」そんな疑問を持っていませんか? ・増減するデータを柔軟に管理したい・動的配列の基本的...

VBAの「Array関数」を使用する際の注意ポイント

VBAのArray関数を使用する際には、以下の注意ポイントを押さえておきましょう。

注意1: 配列の型がVariant以外ではエラーが出ます

VBAのArray関数を使って配列を作成する際、配列の型として必ずVariant型を使用する必要があります。

Variant型は、VBAにおいて最も汎用的なデータ型で、数値、文字列、日付、オブジェクト、さらには配列自体まで、あらゆるデータを格納できる特別な型です。

なぜArray関数でVariant型を使う必要があるのか?

VBAのArray関数は、異なる型の値を1つの配列にまとめることができるため非常に便利です。

しかし、Array関数が返す配列の型は自動的にVariant型となります。

そのため、配列を格納する変数もVariant型にしなければなりません

もし他の型(たとえばLong型やString型など)で配列を宣言すると、VBAはこれらの型では配列のデータを正しく処理できないため、エラーが発生します。

特に、1次元や2次元配列を作成する場合、必ずVariant型で宣言することが重要です。

コード例:Variant型で1次元配列を作成

次のコードは、VBAのArray関数を使って1次元配列を作成し、Variant型で正しく宣言した例です。

Sub ArrayWithVariant()
    Dim arr As Variant
    arr = Array(1, 2, 3)

    '// 配列の各要素を表示
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        Debug.Print "arr(" & i & ") = " & arr(i)
    Next i
End Sub
Variant型で1次元配列を作成した結果

このコードでは、Array(1, 2, 3)という3つの数値を含む配列をVariant型の変数arrに格納しています。

Variant型を使うことで、異なるデータ型(数値や文字列など)を混在させた配列を作成することも可能です。

注意2: 配列は常に「0」から開始

VBAでは配列のインデックスが「0」から始まるため、最初の要素にアクセスするにはarr(0)を使用します。

以下は、配列の要素にアクセスする例です。

Sub ZeroBasedArray()
    Dim arr As Variant
    arr = Array("A", "B", "C")
    
    '// 配列の各要素を表示
    Debug.Print "arr(0) = " & arr(0) ' A
    Debug.Print "arr(1) = " & arr(1) ' B
    Debug.Print "arr(2) = " & arr(2) ' C
End Sub

このコードでは、Array関数で1次元配列を作成し、インデックスが「0」から始まることに注意しながら各要素を取り出しています。

スポンサーリンク

VBAでのArray関数の使用例をご紹介

VBAでのArray関数の使い方について、実践的なコード例を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

VBAの基礎から応用までを効率よくしっかり学習したい方には、UdemyのVBA講座もおすすめです。

特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。

使用例1: Array関数で1次元配列を作成し、取り出す方法

VBAの「Array関数」を使用して、1次元配列を作成し、その配列から各要素を取り出す方法を紹介します。

このコードでは、作成した配列の要素をDebug.Printで表示するとともに、Excelシートに一括で転送する方法を解説します。

コード例

Sub UseArray()
    Dim arr As Variant
    Dim element As Variant
    arr = Array(1, 2, 3, 4, 5)
    
    '// 配列の各要素をDebug.Printで表示
    For Each element In arr
        Debug.Print element
    Next element
    
    '// 配列をシートに一括で転送(縦に並べる)
    Range("A1:A5").Value = Application.WorksheetFunction.Transpose(arr)
End Sub

処理結果

使用例1の結果

コードの動作概要

STEP
配列を作成する

Array関数を使用して、1次元配列arrを作成します。
この配列には、数値「1, 2, 3, 4, 5」が格納されています。

STEP
配列の各要素を取り出して表示

For Eachループを使用して、配列arr内の各要素を順番に取り出し、Debug.Printで表示します。
これにより、配列の内容がイミディエイトウィンドウに出力されます。

STEP
配列をExcelシートに転送

Application.WorksheetFunction.Transposeを使って、1次元配列を縦に並べてExcelシートのA1セルに一括で転送します。
Transposeは、配列を縦または横に変換して転送する際に使用します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateAndExtractOneDimArray()
    • 「CreateAndExtractOneDimArray」という名前のサブルーチンを定義します。
      サブルーチンはSubで始まり、End Subで終わります。
  2. Dim arr As Variant
    • Array関数を使う場合、配列の型は必ずVariant型にする必要があります
      これにより、異なるデータ型を1つの配列に格納できます。
  3. arr = Array(1, 2, 3, 4, 5)
    • 1次元配列「arr」を作成します。
      この配列には数値「1, 2, 3, 4, 5」が格納されます。
  4. For Each element In arr
    • For Eachループを使用して、配列arrの全要素を順番に取り出し、変数「element」に格納します。
  5. Debug.Print element
    • 取り出した要素をイミディエイトウィンドウに出力します。
      これにより、配列内の各要素が確認できます。
  6. Range(“A1:A5”).Value = Application.WorksheetFunction.Transpose(arr)
    • Transpose関数を使って配列の要素を縦に変換し、ExcelシートのA1に一括で転送します。Transposeを使用することで、配列を縦方向に並べることができます。
  7. End Sub
    • サブルーチンの終了を示します。

このコードでは、VBAのArray関数を使って1次元配列を作成し、その要素を取り出して処理する方法を紹介しています。

For Eachループを使って配列内の各要素を順番にDebug.Printで出力し、同時にTransposeを使用してExcelシートのセル「A1」に一括で転送します。
これにより、配列のデータを効率よく操作・表示できます。

VBAでの配列操作やシートへのデータ転送に役立つ基本的な手法で、VBAにおけるArrayの使い方を学ぶには最適な例です。

使用例2: Array関数で2次元配列を作成し、取り出す方法

VBAで「Array関数」を使用して、2次元配列を作成し、その配列から各要素を取り出す方法を紹介します。

このコードでは、作成した2次元配列の要素をDebug.Printで表示し、さらにExcelシートに一括で転送する方法を解説します。

コード例

Sub CreateAndExtractTwoDimArray()
    Dim arr As Variant
    Dim newArr() As Variant
    Dim i As Long, j As Long

    '// 2次元配列をArray関数で作成
    arr = Array(Array(1, 2, 3), Array(4, 5, 6))

    '// 新しい2次元配列を作成(1から始まる配列のため、サイズを+1)
    ReDim newArr(1 To UBound(arr) + 1, 1 To UBound(arr(0)) + 1)

    '// 値を新しい配列に移しつつ、Debug.Printで出力
    For i = LBound(arr) To UBound(arr)
        For j = LBound(arr(i)) To UBound(arr(i))
            newArr(i + 1, j + 1) = arr(i)(j)
            Debug.Print "newArr(" & i + 1 & "," & j + 1 & ") = " & newArr(i + 1, j + 1)
        Next j
    Next i

    '// 2次元配列をシートに一括で転送
    Range(Cells(1, 1), Cells(UBound(newArr, 1), UBound(newArr, 2))).Value = newArr
End Sub

処理結果

使用例2の処理結果

コードの動作概要

STEP
配列を作成する

Array関数を使用して、2次元配列arrを作成します。この配列には、2行3列の数値が格納されています。
具体的には、Array(1, 2, 3)Array(4, 5, 6)の2つの行があり、それぞれが1次元配列として2次元配列にネストされています。

STEP
配列の各要素を取り出して表示

LBoundUBoundを使って配列の範囲を決定し、Forループで2次元配列内のすべての要素を順番に取り出し、Debug.Printで表示します。
これにより、配列の内容がイミディエイトウィンドウに出力されます。

STEP
配列をExcelシートに転送

Range オブジェクトを使用して、作成した2次元配列をExcelシートに一括で転送します。
配列の1行目がシートの「A1」から始まり、2行目は「A2」にから始まります。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CreateAndExtractTwoDimArray()
    • これはサブルーチン(プロシージャ)の開始を示す行です。Subは「Subroutine」の略で、サブルーチンは特定の処理をまとめた一連の命令です。
  2. Dim arr As Variant
    • 「arr」という配列変数をVariant型として宣言しています。
  3. Dim newArr() As Variant
    • 「newArr」という配列を、Variant型として宣言しています。
      この時点では配列のサイズは決まっていません。
      配列のサイズを後で指定するため、()を使って配列だと明示します。
      後でサイズを設定します。
  4. Dim i As Long, j As Long
    • ループカウンタ用に、「i」と「j」という変数をLong型で宣言しています。
  5. arr = Array(Array(1, 2, 3), Array(4, 5, 6))
    • 2次元配列「arr」をArray関数を使って作成しています。

      Array(1, 2, 3)とArray(4, 5, 6)で2行3列の配列を作成しています。
      Array関数は、複数の値をまとめて配列にします。
      この場合は2次元配列のように見えますが、実際は「配列の中に配列が入っている」構造です。
  6. ReDim newArr(1 To UBound(arr) + 1, 1 To UBound(arr(0)) + 1)
    • 「newArr」という配列のサイズを指定し、再定義しています。
      ReDimは、配列のサイズを指定するための命令です。
      この場合、arrの行数と列数に基づいてサイズを設定しています。
      UBound(arr)で配列の上限(要素数)を取得し、それに「+1」して「1」から始まる配列を作成しています。
  7. For i = LBound(arr) To UBound(arr)
    • 2次元配列「arr」の行を繰り返し処理するための外側のForループです。
      LBound(arr)で配列の下限(この場合は0)を取得し、UBound(arr)で上限(1)を取得しています。これにより、2行の配列を順番に処理します。
  8. For j = LBound(arr(i)) To UBound(arr(i))
    • 各行に対して、列の要素を繰り返し処理するための内側のForループです。
      LBound(arr(i))とUBound(arr(i))を使って、その行の中の列の下限と上限を取得しています。
      この場合、各行に3つの列があるため、0から2までの範囲を繰り返します。
  9. newArr(i + 1, j + 1) = arr(i)(j)
    • 元の配列「arr」の要素を新しい配列「newArr」にコピーしています。
      arrは「0」から始まる配列ですが、newArrは「1」から始まる配列にしているので、「i」や「j」に「+1」しています。
  10. Debug.Print “newArr(” & i + 1 & “,” & j + 1 & “) = ” & newArr(i + 1, j + 1)
    • 新しい配列newArrの値をイミディエイトウィンドウに表示しています。
      Debug.Printは、値をイミディエイトウィンドウに出力するための命令です。
      プログラムの動作を確認するためによく使われます。newArr(i + 1, j + 1)の値が出力されます。
  11. Next j
    • 内側のForループを終了し、次の列へ移動します。
  12. Next i
    • 外側のForループを終了し、次の行へ移動します。
  13. Range(Cells(1, 1), Cells(UBound(newArr, 1), UBound(newArr, 2))).Value = newArr
    • 新しい配列「newArr」の内容をExcelシートに一括で転送しています。
      Range(Cells(1, 1), Cells(UBound(newArr, 1), UBound(newArr, 2)))は、シート上の範囲を指定しています。
      この範囲に「newArr」の値を一括で設定します。Cells(1, 1)はシートのセルA1を指しており、そこから始まる範囲に配列の値を転送します。
  14. End Sub
    • サブルーチンの終了を示します。

このコードでは、VBAのArray関数を使って2次元配列を作成し、その要素を取り出して処理する方法を解説しています。

Forループを用いて、2次元配列の各行・各列の要素をDebug.Printで出力し、さらにRangeオブジェクトを使ってExcelシートの「A1」セルに一括で転送します。
これにより、表形式のデータを効率的に操作・表示できます。

VBAでの2次元配列操作やシートへのデータ転送に役立つ基本的な手法です。

使用例3: Array関数で1次元配列を作成し、要素を追加する方法

VBAの「Array関数」を使用して1次元配列を作成し、その配列に新しい要素を追加する方法を紹介します。

このコードでは、配列のサイズをReDim Preserveを使って拡張し、既存のデータを保持しつつ新しい要素を追加します。
最後に、配列の要素をDebug.Printで表示し、Excelシートに一括で転送する方法を解説します。

コード例

Sub AddElementToArray()
    Dim arr As Variant
    arr = Array(1, 2, 3)

    '// 配列のサイズを拡張して要素を追加(既存データを保持)
    ReDim Preserve arr(UBound(arr) + 1)
    arr(UBound(arr)) = 4  ' 新しい要素を追加

    '// 配列の各要素をDebug.Printで表示
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        Debug.Print arr(i)
    Next i

    '// 配列をシートに一括で転送(縦に並べる)
    Range("A1:A4").Value = Application.WorksheetFunction.Transpose(arr)
End Sub

処理結果

使用例3の処理結果

コードの動作概要

STEP
配列を作成する

Array関数を使用して、1次元配列arrを作成します。
この配列には最初に「1, 2, 3」の3つの要素が格納されています。

STEP
配列に要素を追加する

ReDim Preserveを使って配列のサイズを拡張し、既存のデータを保持しながら新しい要素を追加します。UBound(arr) + 1で配列の上限を1つ増やし、新しい要素「4」を最後に追加します。

STEP
配列の各要素を取り出して表示

Forループを使用して、配列の全要素を順に取り出し、Debug.Printで表示します。これにより、追加した要素も含めて配列全体がイミディエイトウィンドウに出力されます。

STEP
配列をExcelシートに転送

Application.WorksheetFunction.Transposeを使って、1次元配列を縦に並べてExcelシートのA1セルに一括で転送します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub AddElementToArray()
    • 新しいサブルーチン「AddElementToArray」を定義しています。
      Subはサブルーチンの開始を示し、End Subまでの一連の命令がこのサブルーチンとして実行されます。
  2. Dim arr As Variant
    • 「arr」という名前の配列変数をVariant型として宣言しています。
      Variant型を使うことで、配列に数値や文字列などさまざまな型を含むことができます。
  3. arr = Array(1, 2, 3)
    • 1次元配列「arr」を作成します。
      この配列には最初に「1, 2, 3」の3つの要素が格納されています。
  4. ReDim Preserve arr(UBound(arr) + 1)
    • ReDim Preserveを使って配列のサイズを1つ拡張し、既存のデータを保持します。
      UBound(arr)は配列の上限を返し、「+1」することで新しい要素を追加できるようにしています。
  5. arr(UBound(arr)) = 4
    • 配列の最後に新しい要素「4」を追加します。
  6. Dim i As Long
    • 変数「i」をLong型として宣言しています。
      「i」は後のForループで配列のインデックスを指定するために使います。
  7. For i = LBound(arr) To UBound(arr)
    • LBoundとUBoundを使って配列の範囲を決定し、全要素を順に取り出すためにForループを使用します。
  8. Debug.Print arr(i)
    • 取り出した各要素をイミディエイトウィンドウに出力します。
      これにより、配列内の全要素が表示されます。
  9. Next i
    • Forループの終了を示します。
      この行によって次のインデックス「i」に進み、配列のすべての要素が処理されるまでループが続きます。
  10. Range(“A1:A4”).Value = Application.WorksheetFunction.Transpose(arr)
    • 配列をExcelシートの「A1」セルに縦に並べて転送します。
      Transposeを使うことで、1次元配列の要素を縦方向に並べることができます。
  11. End Sub
    • サブルーチンの終了を示します。

このコードでは、VBAのArray関数を使って1次元配列を作成し、その配列に新しい要素を追加する方法を解説しています。

ReDim Preserveを使用して、配列のサイズを拡張しつつ既存のデータを保持し、新しい要素を追加します。
配列の全要素をDebug.Printで表示し、さらにExcelシートに一括で転送する方法も紹介しています。

この手法は、動的に配列を扱う際に便利です。VBAの配列操作に役立つ基本的な方法です。

使用例4: Array関数で1次元配列を作成し、要素を削除する方法

VBAの「Array関数」を使用して1次元配列を作成し、その配列から指定した要素を削除する方法を紹介します。

このコードでは、削除したい要素を除外し、新しい配列にコピーします。
削除後の配列をDebug.Printで表示し、Excelシートに転送する方法も解説します。

コード例

Sub RemoveElementFromArray()
    Dim arr As Variant
    arr = Array(1, 2, 3, 4)

    '// 削除したい要素(ここでは2番目の "2")を除外するために新しい配列を作成
    Dim newArr() As Variant
    Dim i As Long, j As Long
    ReDim newArr(UBound(arr) - 1)  '// 新しい配列を1つ小さく作成

    j = 0
    For i = LBound(arr) To UBound(arr)
        If arr(i) <> 2 Then  '// 削除する要素以外を新しい配列にコピー
            newArr(j) = arr(i)
            j = j + 1
        End If
    Next i

    '// 新しい配列の各要素をDebug.Printで表示
    For i = LBound(newArr) To UBound(newArr)
        Debug.Print newArr(i)
    Next i

    '// 新しい配列をシートに一括で転送
    Range("A1:A3").Value = Application.WorksheetFunction.Transpose(newArr)
End Sub

処理結果

使用例4の処理結果

コードの動作概要

STEP
配列を作成する

Array関数を使用して、1次元配列arrを作成します。
この配列には、数値「1, 2, 3, 4」が格納されています。

STEP
削除したい要素以外を新しい配列にコピー

削除したい要素を除外するために、新しい配列newArrを作成し、Forループを使って、削除する要素以外を新しい配列にコピーします。

STEP
新しい配列の要素を取り出して表示

新しい配列の各要素をDebug.Printで出力します。
これにより、削除後の配列の要素がイミディエイトウィンドウに表示されます。

STEP
新しい配列をExcelシートに転送

削除後の新しい配列をTranspose関数を使って縦に並べ、Excelシートの「A1」セルに一括で転送します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub RemoveElementFromArray()
    • 新しいサブルーチン「RemoveElementFromArray」を定義します。
      このサブルーチンは指定された要素を削除した新しい配列を作成します。
  2. Dim arr As Variant
    • 「arr」という名前の配列変数をVariant型で宣言します。
      Array関数を使う場合はVariant型で宣言する必要があります。
  3. arr = Array(1, 2, 3, 4)
    • Array関数を使って、1次元配列「arr」を作成します。
      この配列には「1, 2, 3, 4」が格納されています。
  4. Dim newArr() As Variant
    • 新しい配列「newArr」を「Variant」型で宣言します。
      削除後の要素をこの新しい配列にコピーします。
  5. Dim i As Long, j As Long
    • 配列の最後に新しい要素「4」を追加します。
  6. Dim i As Long
    • 「i」と「j」をLong型として宣言します。
      「i」は元の配列のインデックスを、「j」は新しい配列のインデックスを管理します。
  7. ReDim newArr(UBound(arr) – 1)
    • ReDimを使って、新しい配列「newArr」のサイズを元の配列より1つ小さく設定します。
      削除した要素分だけ配列を縮小します。
  8. j = 0
    • 新しい配列「newArr」のインデックスjを初期化します。
      これにより、新しい配列の要素を「0」から順に埋めることができます。
  9. For i = LBound(arr) To UBound(arr)
    • Forループを使って、元の配列「arr」のすべての要素を走査します。
      LBound(arr)は配列の最初の要素、UBound(arr)は最後の要素を指します。
  10. If arr(i) <> 2 Then ‘ 削除する要素以外を新しい配列にコピー
    • If文を使って、削除したい要素「2」を除外しています。
      この条件が満たされた場合、次の行で新しい配列に要素をコピーします。
  11. newArr(j) = arr(i)
    • 削除しない要素を新しい配列「newArr」にコピーします。
  12. j = j + 1
    • 新しい配列のインデックス「j」を1つ増やします。
      次の要素を新しい配列にコピーするために必要です。
  13. Next i
    • Forループの終了を示します。
      元の配列「arr」のすべての要素を処理するまで、このループは続きます。
  14. For i = LBound(newArr) To UBound(newArr)
    • 新しい配列「newArr」の各要素を走査するためのForループです。
  15. Debug.Print newArr(i)
    • 新しい配列の要素をイミディエイトウィンドウに出力します。
  16. Next i
    • Forループの終了を示します。
      新しい配列のすべての要素が表示されるまで、ループが続きます。
  17. Range(“A1:A3”).Value = Application.WorksheetFunction.Transpose(newArr)
    • Range(“A1:A3”).Valueで、新しい配列「newArr」をExcelシートの「A1」から「A3」セルに縦に転送します。
      Transpose関数は配列を縦に並べるために使用します。
  18. End Sub
    • サブルーチンの終了を示します。

このコードでは、VBAのArray関数を使って1次元配列を作成し、その配列に新しい要素を追加する方法を解説しています。

ReDim Preserveを使用して、配列のサイズを拡張しつつ既存のデータを保持し、新しい要素を追加します。
配列の全要素をDebug.Printで表示し、さらにExcelシートに一括で転送する方法も紹介しています。

この手法は、動的に配列を扱う際に便利です。VBAの配列操作に役立つ基本的な方法です。

使用例5: Array関数で2次元配列を作成し、要素を追加する方法

VBAの「Array関数」を使用して2次元配列を作成し、その配列に新しい行(要素)を追加する方法を紹介します。

このコードでは、既存の配列に新しい行を追加し、Debug.Printで各要素を表示するとともに、Excelシートに一括で転送する方法を解説します。

コード例

Sub AddElementToTwoDimArray()
    Dim arr As Variant
    arr = Array(Array(1, 2, 3), Array(4, 5, 6))

    '// 新しい要素を追加するために行を増やす
    Dim newArr() As Variant
    Dim i As Long

    '// 2次元配列として新しい行を追加
    ReDim newArr(LBound(arr) To UBound(arr) + 1, LBound(arr(0)) To UBound(arr(0)))

    '// 既存の行を新しい配列にコピー
    Dim j As Long
    
    For i = LBound(arr) To UBound(arr)
        For j = LBound(arr(i)) To UBound(arr(i))
            newArr(i, j) = arr(i)(j)
        Next j
    Next i

    '// 新しい行を追加
    For j = LBound(arr(0)) To UBound(arr(0))
        newArr(UBound(arr) + 1, j) = 7 + j  '// 新しい行 (7, 8, 9) を追加
    Next j

    '// 新しい配列の各要素をDebug.Printで表示
    For i = LBound(newArr) To UBound(newArr)
        For j = LBound(newArr, 2) To UBound(newArr, 2)
            Debug.Print newArr(i, j)
        Next j
    Next i

    '// 新しい2次元配列をシートに一括で転送
    Range(Cells(1, 1), Cells(UBound(newArr, 1) + 1, UBound(newArr, 2) + 1)).Value = newArr
End Sub

処理結果

使用例5の処理結果

コードの動作概要

STEP
2次元配列を作成する

最初に、Array関数を使用して2次元配列arrを作成します。
この配列には「1, 2, 3」と「4, 5, 6」の2行3列のデータが格納されます。

STEP
新しい行を追加するために配列サイズを拡張

次に、ReDimを使って元の配列に1行追加し、新しい配列newArrを作成します。
この新しい配列は、元の配列に基づき、1行追加されています。

STEP
元の配列を新しい配列にコピー

Forループを使って、元の配列のすべての要素を新しい配列にコピーします。
既存のデータをそのまま保持した状態で、新しい配列に移行します。

STEP
配列をExcelシートに転送する

最後に、RangeCellsを使って配列のデータをExcelシートに転送します。
動的に設定されたセル範囲に新しい配列が転記されます。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub AddElementToTwoDimArray()
    • 新しいサブルーチンを定義しています。
      このサブルーチンでは、2次元配列に新しい行を追加し、その内容をExcelシートに転送します。
  2. Dim arr As Variant
    • 「arr」という名前の配列変数をVariant型で宣言しています。
      Array関数を使うため、配列はVariant型で宣言する必要があります。
  3. arr = Array(Array(1, 2, 3), Array(4, 5, 6))
    • Array関数を使って、2次元配列「arr」を作成します。
      2行3列のデータを持つ配列で、各行には「1, 2, 3」と「4, 5, 6」が格納されています。
  4. Dim newArr() As Variant
    • 「newArr」という名前の新しい配列をVariant型で宣言しています。
      この配列に新しい行を含むデータを格納します。
  5. Dim i As Long
    • 変数「i」をLong型で宣言します。
      「i」はループのカウンターとして使用され、配列の行を走査します。
  6. ReDim newArr(LBound(arr) To UBound(arr) + 1, LBound(arr(0)) To UBound(arr(0)))
    • ReDimを使用して、「arr」より1行多い新しい配列「newArr」を再宣言しています。
      LBoundは配列の最小インデックス、UBoundは配列の最大インデックスを取得します。
      この行で、元の配列より1行大きい配列を作成しています。
  7. Dim j As Long
    • 変数「j」をLong型で宣言します。
      「j」は列を走査するために使用します。
  8. For i = LBound(arr) To UBound(arr)
    • Forループを使用して、元の配列「arr」のすべての行を走査しています。
      LBound(arr)は最初の行、UBound(arr)は最後の行のインデックスです。
  9. For j = LBound(arr(i)) To UBound(arr(i))
    • 内側のForループで、各行のすべての列を走査しています。
      LBound(arr(i))は各行の最初の列、UBound(arr(i))は各行の最後の列です。
  10. newArr(i, j) = arr(i)(j)
    • 元の配列「arr」の各要素を新しい配列「newArr」にコピーしています。
      これにより、既存のデータが新しい配列に移行されます。
  11. Next j
    • 内側のForループを終了し、次の列に進みます。
      すべての列が処理されるまで続きます。
  12. Next i
    • 外側のForループを終了し、次の行に進みます。
      すべての行が処理されるまで続きます。
  13. For j = LBound(arr(0)) To UBound(arr(0))
    • 新しい行を追加するためのループです。
      元の配列の列数に基づいて新しい行にデータを追加します。
      arr(0)は1行目を示し、その列範囲を使います。
  14. newArr(UBound(arr) + 1, j) = 7 + j ‘ 新しい行 (7, 8, 9) を追加
    • 新しい行として、「7, 8, 9」を追加しています。
      UBound(arr) + 1で新しい最終行のインデックスを指定し、各列に順に「7 + j」の値を入れています。
  15. Next j
    • 新しい行のすべての列が処理されるまでループが続きます。
      列の追加が終わると、このループが終了します。
  16. For i = LBound(newArr) To UBound(newArr)
    • 新しい配列のすべての行を処理するためのForループです。
      LBound(newArr)は最初の行、UBound(newArr)は最後の行を示します。
  17. For j = LBound(newArr, 2) To UBound(newArr, 2)
    • 内側のForループで、各行のすべての列を処理します。
      LBound(newArr, 2)は最初の列、UBound(newArr, 2)は最後の列を示します。
  18. Debug.Print newArr(i, j)
    • 新しい配列「newArr」の各要素をDebug.Printで出力し、イミディエイトウィンドウに表示します。
      これにより、配列の中身が確認できます。
  19. Next j
    • 内側のループを終了し、次の列に進みます。
      すべての列が処理されるまで続きます。
  20. Next i
    • 外側のループを終了し、次の行に進みます。
      すべての行が処理されるまで続きます。
  21. Range(Cells(1, 1), Cells(UBound(newArr, 1) + 1, UBound(newArr, 2) + 1)).Value = newArr
    • RangeとCellsを使って、Excelシートのセル範囲に新しい配列のデータを転送しています。
      UBound(newArr, 1)とUBound(newArr, 2)を使って、配列の行数と列数に基づいて転送範囲を動的に設定しています。
  22. End Sub
    • サブルーチンの終了を示します。

このコードでは、VBAのArray関数を使用して2次元配列を作成し、新しい行を動的に追加します。

ReDimで配列のサイズを拡張し、元のデータを保持しつつ新しいデータを追加する仕組みです。
結果は、Excelシートに一括転送され、操作の効率が向上します。

使用例6: Array関数で2次元配列を作成し、要素を削除する方法

VBAの「Array関数」を使って作成した2次元配列から、特定の行(要素)を削除する方法を解説します。

このコードでは、既存の2次元配列から指定した行を削除し、新しい配列を作成します。
削除後の配列の内容をDebug.Printで確認し、さらにExcelシートに一括で転送する手順も紹介します。
これにより、効率的なデータ管理が可能になります。

コード例

Sub RemoveElementFromTwoDimArray()
    Dim arr As Variant
    arr = Array(Array(1, 2, 3), Array(4, 5, 6)) '// 2次元配列の作成

    '// 2次元配列から特定の行を削除する(ここでは2番目の行を削除)
    Dim newArr() As Variant
    Dim i As Long, j As Long
    
    ' 新しい2次元配列を作成(行数を1減らす)
    ReDim newArr(LBound(arr) To UBound(arr) - 1, LBound(arr(0)) To UBound(arr(0)))

    j = 0
    For i = LBound(arr) To UBound(arr)
        If i <> 1 Then  '// 削除する行以外を新しい配列にコピー
            Dim k As Long
            For k = LBound(arr(i)) To UBound(arr(i))
                newArr(j, k) = arr(i)(k)  ' 新しい2次元配列にデータをコピー
            Next k
            j = j + 1
        End If
    Next i

    '// 新しい配列の各要素をDebug.Printで表示
    For i = LBound(newArr, 1) To UBound(newArr, 1)
        For j = LBound(newArr, 2) To UBound(newArr, 2)
            Debug.Print newArr(i, j)
        Next j
    Next i

    '// 新しい2次元配列をシートに一括で転送
    Range(Cells(1, 1), Cells(UBound(newArr, 1) + 1, UBound(newArr, 2) + 1)).Value = newArr
End Sub

処理結果

使用例6の処理結果

コードの動作概要

STEP
2次元配列を作成する

最初に、Array関数を使用して2次元配列arrを作成します。
この配列には2行3列のデータが格納されています。具体的には「1, 2, 3」と「4, 5, 6」が2行にわたって格納されます。

STEP
新しい配列を作成し、配列サイズを縮小する

次に、ReDimを使用して元の配列から1行削除した新しい配列newArrを作成します。
この新しい配列は、元の配列より1行少ない行数に設定されています。

STEP
元の配列の行をコピー

Forループを使って、元の配列から削除対象の行(ここでは2番目の行)を除外し、それ以外の行を新しい配列にコピーします。
既存のデータは保持され、削除する行のみ除外されます。

STEP
配列をExcelシートに転送する

最後に、RangeCellsを使用して、新しい配列newArrをExcelシートに転送します。
配列のサイズに基づいて転送範囲が動的に決定され、シートのセルに転記されます。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub RemoveElementFromTwoDimArray()
    • ここで「RemoveElementFromTwoDimArray」という名前のサブルーチン(VBAのプログラム)が始まります。
      このプログラムは、2次元配列から行を削除し、新しい配列に変更したものをExcelシートに転送します。
  2. Dim arr As Variant
    • 「arr」という名前の配列を宣言しています。
      Variant型は、どんなタイプのデータでも扱える柔軟な型です。
      Array関数を使うためには、このVariant型を使う必要があります。
  3. arr = Array(Array(1, 2, 3), Array(4, 5, 6))
    • Array関数を使って2次元配列「arr」を作成しています。
      この配列には「1, 2, 3」と「4, 5, 6」の2行3列のデータが入っています
      つまり、arr(0)には「1, 2, 3」、arr(1)には「4, 5, 6」が格納されています。
  4. Dim newArr() As Variant
    • 元の配列から行を削除した後にデータを保持するため、新しい配列「newArr」を宣言しています。
      これはVariant型で、削除後のデータを格納します。
  5. Dim i As Long, j As Long
    • 変数「i」と「j」をLong型で宣言します。
      これらは後で、行と列を操作するためのループカウンターとして使用します。
      Long型は、整数値を扱うためのデータ型です。
  6. ReDim newArr(LBound(arr) To UBound(arr) – 1, LBound(arr(0)) To UBound(arr(0)))
    • ReDimを使って、新しい配列「newArr」を元の配列「arr」よりも1行少なく作成します。
      LBoundとUBoundは、配列の最初と最後のインデックスを取得します。
      • LBound(arr) は配列の最初の行(通常は0)
      • UBound(arr) - 1 は元の配列より1行少ない行数
      • LBound(arr(0))UBound(arr(0))は列の範囲(0から2、つまり3列)を示しています。
  7. j = 0
    • 変数「j」を「0」に初期化します。
      これから、元の配列から新しい配列にデータをコピーする際に、「j」を使って新しい配列の行番号を管理します。
  8. For i = LBound(arr) To UBound(arr)
    • Forループを使って、元の配列「arr」の行を最初から最後まで順番に処理します。
      LBound(arr)は最初の行(0)、UBound(arr)は最後の行(1)を指します。
  9. If i <> 1 Then
    • If i <> 1 という条件は、「もし行番号が1(2番目の行)でないなら」という意味です。
      2番目の行はコピーせず、それ以外の行を新しい配列にコピーします。
  10. Dim k As Long
    • 列を操作するために、変数「k」をLong型で宣言します。
      この変数は列番号を追跡します。
  11. For k = LBound(arr(i)) To UBound(arr(i))
    • 内側のForループを使って、配列の各行のすべての列を処理します。
      LBound(arr(i))はその行の最初の列(0)、UBound(arr(i))は最後の列(2)を示します。
  12. newArr(j, k) = arr(i)(k) ‘ 新しい2次元配列にデータをコピー
    • 元の配列「arr(i)(k)」のデータを、新しい配列「newArr(j, k)」にコピーします。
      「j」は新しい配列の行、「k」は列を示しています。
  13. Next k
    • この行で列の処理を終了し、次の列に進みます。
  14. j = j + 1
    • 新しい配列の次の行に進むため、「j」を「1」増やします。
      これで、新しいデータが次の行にコピーされるようになります。
  15. End If
    • 行が2番目でない場合の処理を終了します。
  16. Next i
    • この行で行の処理を終了し、次の行に進みます。
  17. For i = LBound(newArr, 1) To UBound(newArr, 1)
    • Forループで新しい配列「newArr」のすべての行を処理します。
      LBound(newArr, 1)は最初の行、UBound(newArr, 1)は最後の行を示しています。
  18. For j = LBound(newArr, 2) To UBound(newArr, 2)
    • 内側のForループで、各行のすべての列を処理します。
      LBound(newArr, 2)は最初の列、UBound(newArr, 2)は最後の列を示しています。
  19. Debug.Print newArr(i, j)
    • Debug.Printを使って、新しい配列「newArr」の各要素をイミディエイトウィンドウに表示します。
      これはVBAのデバッグ機能で、配列の内容を確認できます。
  20. Next j
    • この行で列の処理を終了し、次の列に進みます。
  21. Next i
    • この行で行の処理を終了し、次の行に進みます。
  22. Range(Cells(1, 1), Cells(UBound(newArr, 1) + 1, UBound(newArr, 2) + 1)).Value = newArr
    • RangeとCellsを使って、配列「newArr」の内容をExcelシートに転送します。
      この場合、Cells(1, 1)はセルA1を示し、配列のサイズに基づいて転送範囲を動的に設定しています。
  23. End Sub
    • ここでサブルーチンが終了します。

このコードでは、VBAのArray関数を使用して2次元配列を作成し、特定の行を削除する方法を示しています。

ReDimを使って配列サイズを変更し、必要な行を新しい配列にコピーすることで、削除操作を実現しています。
データはDebug.Printで出力され、Excelシートにも転送されます。

この手法は、配列操作に柔軟性を持たせる便利な方法です。

この記事のまとめ

今回の記事では、VBAの「Array関数」を使った配列操作の基本から、実際に使える応用テクニックまでを解説しました。

特に、1次元・2次元配列の作成、要素の追加や削除など、日常的な業務でよく使われる実践的な例を紹介しました。

ポイントのおさらい

VBAの「Ubound」と「Lbound」を活用することで、配列操作がより柔軟で効率的になります。
これにより、配列のサイズや要素を動的に管理できるため、データの変動が激しい状況でも柔軟に対応できます。
2次元配列や動的配列を使った業務の効率化にぜひ役立ててください。

再度記事を確認しながら、コードを実際に動かし、スキルを確実に自分のものにしましょう。

この記事の内容を参考にし、次のステップとして配列操作をもっと深く掘り下げ、業務の効率化を進めていきましょう。

あわせて読みたい
サイトマップ VBAOfficeスクリプトワークシート関数 VBA 基本設定 VBAとは? VBAの始め方 VBAのおすすめ設定 セル操作 RangeとCells CurrentRegion Offset Resize 最終行・最終列の取...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次