Excel VBA で Range.Value を配列に読み込むと、二次元配列(行 × 列)として扱えます。
これを使うと「複数列のデータをまとめて処理 → 一括で書き戻す」ことができます。
基本の考え方
Range("B2:D10").Value→ arr(行番号, 列番号) の二次元配列になる- 行番号は 1~行数、列番号は 1~列数
UBound(arr, 1)→ 行数UBound(arr, 2)→ 列数
実装例①:単価 × 数量 → 金額を計算
シナリオ: B列=単価, C列=数量, D列=金額 を計算して書き戻す。
Sub CalcAmount()
Dim arr As Variant
Dim i As Long
' B2:D100 を配列に読み込む
arr = Range("B2:D100").Value
' 行ごとに計算
For i = 1 To UBound(arr, 1)
If IsNumeric(arr(i, 1)) And IsNumeric(arr(i, 2)) Then
arr(i, 3) = arr(i, 1) * arr(i, 2) '金額列に計算結果を代入
End If
Next i
' 一括で書き戻す
Range("B2:D100").Value = arr
End Sub
VB実装例②:複数列の条件付き処理
シナリオ: 売上表(A列=商品名, B列=数量, C列=単価, D列=売上)で、数量が10以上なら売上を赤字にする。
Sub HighlightSales()
Dim arr As Variant
Dim i As Long
' A2:D50 を配列に読み込む
arr = Range("A2:D50").Value
' 条件判定
For i = 1 To UBound(arr, 1)
If IsNumeric(arr(i, 2)) And arr(i, 2) >= 10 Then
arr(i, 4) = arr(i, 2) * arr(i, 3) '売上を計算
End If
Next i
' 書き戻し
Range("A2:D50").Value = arr
' 書式設定はセルに直接アクセス(配列では色を持てない)
For i = 2 To 50
If Cells(i, 2).Value >= 10 Then
Cells(i, 4).Font.Color = vbRed
End If
Next i
End Sub
VB実装例③:複数列の平均を計算
シナリオ: テスト点数(B列=国語, C列=数学, D列=英語)から平均点を E列に出す。
Sub CalcAverage()
Dim arr As Variant
Dim i As Long
' B2:D30 を配列に読み込む
arr = Range("B2:D30").Value
' 平均計算
For i = 1 To UBound(arr, 1)
If IsNumeric(arr(i, 1)) And IsNumeric(arr(i, 2)) And IsNumeric(arr(i, 3)) Then
arr(i, 3) = arr(i, 3) '英語はそのまま
' 平均を新しい列に追加するため、配列拡張は不可 → 別列に直接書き込み
Range("E" & i + 1).Value = (arr(i, 1) + arr(i, 2) + arr(i, 3)) / 3
End If
Next i
End Sub
VB✅ まとめ
- 配列に読み込むと「行×列」の二次元配列になる
- 大量データを一括処理 → 高速化
- 計算や加工は配列で、書式設定はセルに直接アクセス

