VBAで複数のセルに値を設定する際、1つずつ値を代入するのではなく、配列を使って一括で設定すると、コードがすっきりして処理も高速になります。この記事では、配列を使った一括設定の基本から応用、そして Application.Transpose
を用いた縦横変換についても分かりやすく解説します。
目次
1. なぜ配列で一括設定するのか?
たとえば、以下のように1つずつ値を設定する場合:
Range("A1").Value = "りんご"
Range("A2").Value = "バナナ"
Range("A3").Value = "みかん"
このようなコードは簡単に見えても、データ量が多いと処理が遅くなる要因になります。
2. 一次元配列を使った一括設定
Array
関数を使って配列を作り、それをセル範囲に渡すことで、一括で値を設定できます。
⚫️横方向に設定(A1~C1)
Sub SetFruitsHorizontal()
Dim fruits As Variant
fruits = Array("りんご", "バナナ", "みかん")
Range("A1:C1").Value = fruits
End Sub
この場合、配列は 横並び(1次元)なので、横に並んだセル範囲にそのまま代入できます。
⚫️縦方向に設定(A1~A3)→ Transpose を使用
Sub SetFruitsVertical()
Dim fruits As Variant
fruits = Array("りんご", "バナナ", "みかん")
Range("A1:A3").Value = Application.Transpose(fruits)
End Sub
重要ポイント: Array
関数で作られた配列は横並びの1次元配列です。
これを縦方向に貼り付けたい場合、Application.Transpose
を使って縦方向の2次元配列に変換します。
3. 二次元配列を使った一括設定
表形式のデータ(複数列・複数行)を一括で設定するには、二次元配列を使います。
Sub SetTableValues()
Dim data(1 To 2, 1 To 3) As Variant
data(1, 1) = "名前"
data(1, 2) = "年齢"
data(1, 3) = "出身地"
data(2, 1) = "田中"
data(2, 2) = 30
data(2, 3) = "東京"
Range("A1:C2").Value = data
End Sub
この場合、data
配列は 2行3列なので、Range("A1:C2")
にぴったり対応します。
4. Application.Transposeの使い方と注意点
⚫️役割
Application.Transpose
は、配列の行と列を入れ替える関数です。
1次元配列を縦方向に変換したり、2次元配列の行列を反転したりできます。
⚫️1次元配列 → 縦方向に貼り付け
Dim fruits As Variant
fruits = Array("A", "B", "C")
Range("A1:A3").Value = Application.Transpose(fruits)
⚫️2次元配列 → 行列を反転
Dim arr(1 To 2, 1 To 3) As Variant
'arrは2行3列
Range("A1:B3").Value = Application.Transpose(arr)
'反転後:3行2列に変換される
5. 配列とセル範囲のサイズに注意
配列のサイズと、貼り付け先のセル範囲の行数・列数が一致していないとエラーになります。
'× 間違いの例:配列サイズ2x2に対して、範囲が3列
Range("A1:C2").Value = data
配列サイズとセル範囲を正確に合わせることが大切です。
6. 縦と横の使い分けまとめ
配列の種類 | 例 | 貼り付け範囲例 | Transpose必要 |
---|---|---|---|
一次元配列(横) | Array("A", "B", "C") | A1:C1(横) | 不要 |
一次元配列(横) | Array("A", "B", "C") | A1:A3(縦) | 必要 |
二次元配列 | (1 To 2, 1 To 3) | A1:C2(そのまま) | 不要 |
二次元配列 | (1 To 2, 1 To 3) → Transpose使用 | A1:B3(転置結果) | 必要 |
7. まとめ
配列を使った一括設定は、VBAで効率的な処理を行う上で非常に重要です。特に以下のポイントを覚えておきましょう。
- 一次元配列は横並び → 縦方向に貼るなら
Transpose
を使う - 二次元配列ならセル範囲とサイズを合わせて貼り付け可能
Application.Transpose
を使えば行列の入れ替えができる- 配列とセル範囲のサイズ不一致はエラーの原因
この方法をマスターすれば、表形式のデータ処理や高速なデータ貼り付けがより簡単に実現できます。
コメント