「Range→配列→加工→高速書戻し」というのは、Excel VBAやスプレッドシート処理でよく使う 実務効率化パターン。
基本の流れはこうです:
実務テンプレート(Excel VBA)
Sub RangeToArrayProcessWriteBack()
Dim ws As Worksheet
Dim rng As Range
Dim arr As Variant
Dim i As Long, j As Long
' 対象シートと範囲を指定
Set ws = ThisWorkbook.Sheets("Sheet1")
Set rng = ws.Range("A1:C1000") ' 読み込み範囲
' ① Range → 配列に読み込み(高速)
arr = rng.Value
' ② 配列を加工(例:数値を2倍)
For i = LBound(arr, 1) To UBound(arr, 1)
For j = LBound(arr, 2) To UBound(arr, 2)
If IsNumeric(arr(i, j)) Then
arr(i, j) = arr(i, j) * 2
End If
Next j
Next i
' ③ 配列 → Rangeへ一括書戻し(高速)
rng.Value = arr
End Sub
VBポイント
- Range→配列
arr = rng.Valueで一括読み込み。セルを1つずつ読むより圧倒的に速い。 - 加工
配列上でループ処理。セル操作を避けることで高速化。 - 書戻し
rng.Value = arrで一括書き込み。これもセルごとに書くより速い。
応用例
- 文字列加工(Trim、置換など)
- 条件付き加工(特定値のみ変換)
- 集計やフィルタリング
- 複数シート間のデータ転送
このテンプレをベースにすれば、「大量データを高速処理」する VBA 実務コードがすぐ書けます。
👉 ちなみに、この処理をさらに高速化するなら Variant配列ではなく一次元配列に落とす、DictionaryやCollectionを併用する、などのテクニックもあります。
