実務で「配列に読み込んで一括で書き戻す」処理は、VBAで高速化するための定番テクニックですね。Excelのセルを1つずつ読み書きすると非常に遅くなりますが、Rangeを配列に丸ごと読み込み → 配列で処理 → Rangeに一括書き戻しという流れにすると劇的に速くなります。
基本の流れ
- Rangeを配列に読み込む
Variant型の配列に格納すると、セルの値が二次元配列として入る。
- 配列内で処理する
- ループや計算を配列上で行う。
- Rangeに一括で書き戻す
- 配列をそのままRangeに代入する。
サンプルコード
Sub FastArrayProcess()
Dim ws As Worksheet
Dim data As Variant
Dim i As Long, j As Long
' 対象シート
Set ws = ThisWorkbook.Sheets("Sheet1")
' A1:D1000 のデータを配列に読み込み
data = ws.Range("A1:D1000").Value
' 配列内で処理(例:全ての値を2倍にする)
For i = LBound(data, 1) To UBound(data, 1)
For j = LBound(data, 2) To UBound(data, 2)
If IsNumeric(data(i, j)) Then
data(i, j) = data(i, j) * 2
End If
Next j
Next i
' 一括で書き戻し
ws.Range("A1:D1000").Value = data
MsgBox "処理完了!"
End Sub
VBポイント
- Range.Valueを配列に代入すると、セルの値が一気に読み込まれる。
- セルごとの
.Value書き込みは遅いので、必ず配列でまとめて処理。 - 配列は 1ベースの二次元配列になる(
data(1,1)が A1)。 - 大量データ処理(数万行以上)で特に効果的。
実務での応用例
- 大量データの数値変換(例:売上データの補正)
- 条件付き加工(例:特定文字列を置換)
- 集計前の前処理(例:空白をゼロに置換)
👉 この方法を使うと、数万行の処理でも「数秒 → 一瞬」に短縮できます。

