エクセルで配列を扱う場合、配列の要素数を把握しておく必要があります。
この記事では、2次元配列を要素数を考えずに、コピペで使えるコードをご紹介します。
目次
UBound関数を使って2次元配列を対象セルに貼り付け
2次元配列を簡単に貼り付けるコードは次の通りです。
Range(対象セル, 対象セル.Cells(UBound(MyArray, 1), UBound(MyArray, 2))) = 配列名
具体的に、次のコードを例に解説します。
このコードは、B2~F5の範囲を配列に保存し、H2のセルを起点に配列を貼り付けるコードです。
Sub 二次元配列貼り付け()
'配列と出力するセルを宣言
Dim MyArray() As Variant
Dim OutPnt As Range
'配列を出力するセルを設定
Set OutPnt = ActiveSheet.[H2]
'配列に保存する
MyArray = Range("B2:F5")
'配列を貼り付ける
Range(OutPnt, OutPnt.Cells(UBound(MyArray, 1), UBound(MyArray, 2))) = MyArray
End Sub
次のエクセルでコードを実行した場合の結果です。
■実行前

■実行後

UBound関数って何?
UBound関数は、配列の大きさを返します。
UBound(配列名,[次元])
先ほどのコードでUBound(MyArray,1)は、1次元(行)の上限値4を返します。UBound(MyArray,2)は2次元(列)の上限値5を返します。
UBound関数の2つ目の引数の[]内の次元は、省略可能です。
UBound(MyArray)のみの場合、1次元の上限値4を返します。

0から始まる配列の場合はそのまま使えない!?
VBAで配列を作るときの方法は、大きく2つあります。
1つ目は、この記事のコードでも使っている、範囲を指定して配列に保存する方法です。
MyArray = Range("B2:F5")
こちらの記事で詳しく解説していますので、よかったら見て下さい。
あわせて読みたい


【Excel VBA】テーブルを配列に保存する(1行コード)
VBAでテーブルを直接操作してもいいですが、テーブルを配列に保存し(取り込み)、配列でデータを扱うほうが速い場合があります。 この記事では、テーブルのデータ部分…
2つ目は、配列数を宣言して、配列にデータを1つずつ保存する方法です。
Dim MyArray(1, 2) As Variant
MyArray(0, 0) = 1
MyArray(0, 1) = 2
MyArray(0, 2) = 3
MyArray(1, 0) = 4
MyArray(1, 1) = 5
MyArray(1, 2) = 6
この場合、配列が0から始まるため初めにご紹介した、2次元配列を簡単に貼り付けるコードではうまくいきません。
次のように変更する必要があります。
Range(対象セル, 対象セル.Cells(UBound(MyArray, 1)+1, UBound(MyArray, 2)+1)) = 配列名

1次元、2次元それぞれの上限値に+1を加える必要があります。
まとめ
この記事では、UBound関数を使って2次元配列を簡単に対象セルに貼り付ける方法についてご紹介しました。
下記コードを使ってぜひ試してみて下さい。
■1から始まる配列の場合
Range(対象セル, 対象セル.Cells(UBound(配列名, 1), UBound(配列名, 2))) = 配列名
■0から始まる配列の場合
Range(対象セル, 対象セル.Cells(UBound(MyArray, 1)+1, UBound(MyArray, 2)+1)) = 配列名
コメント