ExcelのVBAでデータを配列に保存し、シートに貼り付けようとすると、横方向に貼り付けられます。
実務では、縦方向で使用するケースの方が多いかと思います。
この記事では、VBAを使って配列に保存されているデータを縦方向に貼り付ける方法について解説します。


配列データをRangeオブジェクトを使ってそのまま出力
Rangeオブジェクトを使って配列を出力する範囲を指定して貼り付けてみます。
Sub 配列データを範囲指定して貼り付け()
'配列を宣言
Dim Kudamono(4) As String
'配列にデータを保存
Kudamono(0) = "リンゴ"
Kudamono(1) = "バナナ"
Kudamono(2) = "桃"
Kudamono(3) = "みかん"
Kudamono(4) = "いちご"
'貼り付け範囲を指定して貼り付け
Range(Cells(2, 2), Cells(10, 10)) = Kudamono
End Sub
■実行結果

Excelでは配列を出力する場合、範囲を指定して出力する必要があります。どのような結果になるかわかりやすいよう配列よりも広い範囲を指定して出力してみました。
この結果から、
- 横方向に出力される
- データがない場合は、「#N/A」と表示される
- 1次元配列を2次元配列で出力すると、1次元配列が繰り返し出力(同じ内容が出力)される
ということがわかります。
配列データを縦方向に貼り付ける方法
配列データを縦方向に貼り付ける(出力する)方法を2つご紹介します。
TRANSPOSE関数を使って貼り付ける
1つ目はTRANSPOSE関数を使って貼り付ける方法です。これは以下のように記述します。
WorksheetFunction.Transpose(配列名)
具体的なコードの使い方は次の通りです。
Sub 配列データを範囲指定して貼り付け_行列入替()
'配列を宣言
Dim Kudamono(4) As String
'配列にデータを保存
Kudamono(0) = "リンゴ"
Kudamono(1) = "バナナ"
Kudamono(2) = "桃"
Kudamono(3) = "みかん"
Kudamono(4) = "いちご"
'貼り付け範囲を指定して貼り付け
Range(Cells(2, 2), Cells(6, 2)) = WorksheetFunction.Transpose(Kudamono)
End Sub
■実行結果

先ほどのコードから14行目のコードを変更しています。
配列データがある範囲を縦方向に指定し、WorksheetFunction.Transpose(Kudamono)で行列を入れ替えて貼り付けます。
For文を使って出力する
2つ目は、For文を使って配列データの中身を繰り返し出力する方法です。
Sub 配列データを範囲指定して貼り付け_For文()
'配列を宣言
Dim Kudamono(4) As String
Dim i As Long
'配列にデータを保存
Kudamono(0) = "リンゴ"
Kudamono(1) = "バナナ"
Kudamono(2) = "桃"
Kudamono(3) = "みかん"
Kudamono(4) = "いちご"
'貼り付け範囲を指定して貼り付け
For i = 0 To 4
Cells(2 + i, 2) = Kudamono(i)
Next
End Sub
■実行結果

5行目にFor文で使う”変数 i ”を宣言し、15~17行目にFor文を変更しています。
B2セルを基準とし、縦方向にセルと配列データを1つずつ増加させながら出力します。

動的配列(配列の数が変動する)を使用する場合は、こちらの記事を参照ください。


まとめ
この記事では、1次元配列を横方向から縦方向に変更して貼り付ける方法についてご紹介しました。
リストとして出力する場合は、横方向より縦方向のほうが見やすいですよね。使う場面は意外と多いかと思いますので是非使ってみて下さい。
コメント