Excel VBA | 配列に読み込んで一括で書き戻す高速処理

VBA
スポンサーリンク

実務で「配列に読み込んで一括で書き戻す」処理は、VBAで高速化するための定番テクニックですね。Excelのセルを1つずつ読み書きすると非常に遅くなりますが、Rangeを配列に丸ごと読み込み → 配列で処理 → Rangeに一括書き戻しという流れにすると劇的に速くなります。


基本の流れ

  1. Rangeを配列に読み込む
    • Variant型の配列に格納すると、セルの値が二次元配列として入る。
  2. 配列内で処理する
    • ループや計算を配列上で行う。
  3. 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)。
  • 大量データ処理(数万行以上)で特に効果的。

実務での応用例

  • 大量データの数値変換(例:売上データの補正)
  • 条件付き加工(例:特定文字列を置換)
  • 集計前の前処理(例:空白をゼロに置換)

👉 この方法を使うと、数万行の処理でも「数秒 → 一瞬」に短縮できます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました