ここでは 「大量データを高速で処理する実務テクニック(配列+書き戻し)」 を、
初心者でも理解できるように、図解レベルでかみ砕いて 解説します。
全体像:なぜ配列が高速なのか?
Excel での“遅さ”の正体は セルに 1 つずつアクセスすること。
❌ 遅い方法(1セルずつ書く)
Cells(1,1)=… ← Excel と通信
Cells(1,2)=… ← Excel と通信
Cells(1,3)=… ← Excel と通信
…
10000回も通信!
✅ 速い方法(配列 → 一気に書き戻す)
arr(r,c)=… ← Excelを一切触らない(超高速)
arr(r,c)=…
Range("A1").Resize(10000,5).Value = arr ← 最後に1回だけ書く
Excelとの通信が “1万回 → 1回” に減るので爆速。
【基本形テンプレ】大量データを高速処理する 3ステップ
Step1:範囲を配列としてまとめて読み込む
Dim arr As Variant
arr = Range("A1:E10000").Value ' ← これだけで 1回ですべて取得
VBarrは 2次元配列になる- arr(1,1) が A1、arr(10000,5) が E10000
- Excelへのアクセスは これで1回だけ
Step2:配列内で全ての計算・加工をする
Dim r As Long
For r = 1 To UBound(arr, 1)
arr(r, 5) = arr(r, 2) * 2 ' 例:E列 = B列の2倍
Next r
VB- Excel を触っていないので、ここが 超高速
- 10万行でもサクサク動く
Step3:加工後の配列を一気に書き戻す
Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
VB- 書き戻し回数は 1回だけ
- 実務でのスピード改善効果は絶大
実務レベルのフルサンプル(超高速テンプレ)
「10万行のデータに、“売上=単価×数量” を作って書き戻す」例
(初心者でもそのまま使える)
Sub SuperFast_Example()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' A列の最終行
'----- Step1:配列として読み込む -----
Dim arr As Variant
arr = ws.Range("A1:D" & lastRow).Value
' arr の構造(例)
' A列 = 商品名
' B列 = 単価
' C列 = 数量
' D列 = 売上(後で埋める)
'----- Step2:配列内で高速処理 -----
Dim i As Long
For i = 2 To UBound(arr, 1)
arr(i, 4) = arr(i, 2) * arr(i, 3) ' 単価 × 数量 → 売上
Next i
'----- Step3:一気に書き戻す -----
ws.Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
MsgBox "完了!(配列で超高速処理)"
End Sub
VBこの処理が「1万件でも一瞬」の理由
| 動作 | 回数 | 速度 |
|---|---|---|
| 配列読み込み | 1回 | 速い |
| 配列内の計算(1万回) | Excelと通信なし | 超高速 |
| 書き戻し | 1回 | 速い |
Excel と通信するのは最初と最後の 2回だけ だからです。
さらに高速化 ― 実務で必ず使う3つのテクニック
① ScreenUpdating を OFF(画面の描画を止める)
Application.ScreenUpdating = False
VB画面がカクカクしなくなり、体感速度が上がります。
② Calculation を手動に(式の再計算を止める)
Application.Calculation = xlCalculationManual
VB大量データのときは特に効果大。
③ EnableEvents を False(イベント発火を止める)
Application.EnableEvents = False
VBChange イベントなどの無駄動作を防止できます。
この3つを安全に ON/OFF するテンプレ
Sub SafeFastStart()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
End Sub
Sub SafeFastEnd()
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
VBまたは
エラーが出ても元に戻すように On Error で囲むプロ方式もあります。

