一括で値を設定する(配列の使用)

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 を使えば行列の入れ替えができる
  • 配列とセル範囲のサイズ不一致はエラーの原因

この方法をマスターすれば、表形式のデータ処理や高速なデータ貼り付けがより簡単に実現できます。

コメント

タイトルとURLをコピーしました