VBA 多次元配列(2次元配列)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 5月 11, 2022

このチュートリアルでは、VBAの2次元配列と多次元配列について説明します。

多次元配列(2次元配列)

多次元配列は、複数の次元を含む配列で、通常は2次元または3次元ですが、最大32次元まで設定することができます。

2次元配列の宣言

複数の次元を持つ配列を作成するには、カンマで区切ってそれぞれの次元を定義します。

Dim intArr(2,3) as Integer

2次元配列の作成

以下のコードは、2次元配列に値を代入し、ワークシートの行と列に配列内の値を代入します。

Sub Populate2D()
'2次元配列の宣言
   Dim intA(2, 3) As Integer
'変数の宣言
   Dim rw As Integer
   Dim col As Integer
'配列に値を入れる
   intA(0, 0) = 45
   intA(0, 1) = 50
   intA(0, 2) = 55
   intA(0, 3) = 60
   intA(1, 0) = 65
   intA(1, 1) = 70
   intA(1, 2) = 75
   intA(1, 3) = 80
   intA(2, 0) = 85
   intA(2, 1) = 90
   intA(2, 2) = 95
   intA(2, 3) = 100
'配列をループしてExcelの表にデータを入力する
   For rw = 0 To 2
      For col = 0 To 3
         Cells(rw + 1, col + 1).Value = intA(rw, col)
      Next col
    Next rw
End Sub

すると、Excelのスプレッドシートには、以下のように入力されるはずです。

vba 2D array

Excelのデータから2次元配列を生成する

以下のコードは、Excelのワークシートから2次元配列を入力し、そのデータを別のシートに入力するものです。

Sub Populate2D()
'ワークシートの宣言
   Dim ws_Source As Worksheet
   Dim ws_Destination As Worksheet
'配列の宣言
   Dim wsData(10, 2) As Variant
'変数の宣言
   Dim rw as Integer
   Dim col As Integer
'参照するシートを設定する
   Set ws_Source = Worksheets("Sheet1")
'シートから情報を取得し、配列に入力する
   For rw = LBound(wsData, 1) To UBound(wsData, 1)
      For col = LBound(wsData, 2) To UBound(wsData, 2)
         wsData(rw, col) = ws_Source.Range("A2").Offset(rw, col).Value
      Next col
   Next rw
'出力するシートを設定する
   Set ws_Destination = Worksheets("Sheet2")
'配列から出力するシートに入力する
   For rw = LBound(wsData, 1) To UBound(wsData, 1)
      For col = LBound(wsData, 2) To UBound(wsData, 2)
         ws_Destination.Range("A1").Offset(rw,col).Value = wsData(rw, col)
      Next col
   Next rw
End Sub

ReDimとReDim Preserveによるサイズ変更

ReDimを使って配列のサイズを変更することができます。(詳しくはこちら

Sub Resize2D()
'配列の宣言
   Dim varArray() as Variant
'配列のサイズを宣言
   ReDim varArray(1, 2)
   varArray(0, 0) = "メル・スミス"
   varArray(0, 1) = "フレッド・バックル"
   varArray(0, 2) = "ジェーン・エア"
   varArray(1, 0) = "会計士"
   varArray(1, 1) = "秘書"
   varArray(1, 2) = "医者"
'配列の大きさを再宣言する
   ReDim varArray(0, 1)
'配列に再投入 
   varArray(0, 0) = "メル・スミス"
   varArray(0, 1) = "フレッド・バックル"
End Sub

配列を再宣言すると、ReDim Preserveステートメントを使用しない限り、それまで配列に保持されていたデータは失われます。

Sub Resize2D()
'配列の宣言 
   Dim varArray() as Variant
'配列のサイズを宣言
   ReDim varArray(1, 2)
   varArray(0, 0) = "メル・スミス"
   varArray(0, 1) = "フレッド・バックル"
   varArray(0, 2) = "ジェーン・エア"
   varArray(1, 0) = "会計士"
   varArray(1, 1) = "秘書"
   varArray(1, 2) = "医者"
'配列の大きさを再宣言する
   ReDim Preserve varArray(1, 3)
'配列に追加の値を入れる
   varArray(0, 3) = "ロブ・バーンズ"
   varArray(1, 3) = "配管工"
End Sub

Re-Dim Preserveで配列の元のデータを保持したい場合は、配列の最後の次元だけサイズを変更することができます。

vba resize array 配列 サイズ

デバッグをクリックすると、配列の最初の次元のサイズが、宣言時から変更されてしまったことを示すエラーがハイライト表示されます。

vba resize array error 配列 リサイズ エラー

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples