VBAでは、複数のセル範囲の値を一度に取得・設定できます。
本記事では Range("A1:B2").Value
のような構文を使い、2次元配列として一括操作する方法を、初心者向けにわかりやすく解説します。
目次
1. 基本構文
Dim arr As Variant
arr = Range("A1:B2").Value
⚫️なぜ Variant
型?
Range("A1:B2").Value
は 2次元配列(Variant型) を返すため、受け取る変数はVariant
型にする必要があります。Variant
でない型(たとえばString
やInteger
)で受け取ろうとするとエラーになります。Variant
は柔軟性が高く、配列や文字列、数値など どんな型のデータでも受け取れるため、セル範囲の一括取得には最適です。
2. セル内容の例(A1:B2の範囲)
実際のシートの内容が以下のような場合:
行番号 | A列 | B列 |
---|---|---|
1 | Apple | Banana |
2 | Orange | Grape |
arr = Range("A1:B2").Value
とすると、arr
は以下のような配列になります:
arr(1,1) = "Apple" 'A1
arr(1,2) = "Banana" 'B1
arr(2,1) = "Orange" 'A2
arr(2,2) = "Grape" 'B2
- 1番目の引数が 行番号、2番目が 列番号
- 配列のインデックスは、1から始まる
3. 一括でコピーする方法
Dim arr As Variant
arr = Range("A1:B2").Value
Range("C1:D2").Value = arr
※コピー先の範囲について
C1:D2
のように、コピー元(A1:B2)と同じサイズの範囲を指定する必要があります。- 一括設定時にサイズが一致していないと値が正確に反映されません。
例えば、以下のようなコードはC1に”アップル”のみコピーされます。
'NG例(貼り付け先が小さい)
Range("C1").Value = arr
4. 取得した配列の要素にアクセスする(デバッグ用)
Dim arr As Variant
arr = Range("A1:B2").ValueDebug.Print arr(1,1) '=> A1(Apple)
Debug.Print arr(2,2) '=> B2(Grape)
5. ループで配列の中身を表示する
Dim i As Long, j As Long
For i = 1 To UBound(arr, 1) '行数
For j = 1 To UBound(arr, 2) '列数
Debug.Print "arr(" & i & "," & j & ") = " & arr(i, j)
Next j
Next i
6. 配列を使ってデータを一括書き換える(応用)
Dim arr As Variant
Dim i As Long, j As Long
arr = Range("A1:B2").Value
'すべての値に「★」をつけてみる
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
arr(i, j) = "★" & arr(i, j)
Next j
Next i
'結果を同じサイズの範囲に書き戻す
Range("A1:B2").Value = arr
7. まとめ
項目 | 説明 |
---|---|
使用構文 | Range("A1:B2").Value |
型 | Variant型の2次元配列で受け取る必要がある |
インデックスの始まり | (1, 1) (※行・列ともに1始まり) |
一括設定の注意点 | 元のセル数と同じサイズの範囲を設定先に指定する必要がある |
サイズが違う場合 | 正常に反映されない (例:2行2列を1セルに代入する等) |
処理の効率性 | 大量のデータ処理で高速かつコードが簡潔になる |
複数セルを配列として一括で操作する方法は、VBAの中でも効率的な基本テクニックです。
特に、表データの読み書きや加工処理において、必ず使うことになる重要な方法です。
コメント