ここでは 例題3(掛け算表 5×5) を題材にして、
「普通の書き込み」→「配列で高速化」 の違いを、初心者向けにかみ砕いて説明します。
元の例題3(セルへひとつずつ書く方式)
まず復習です。
Sub MultiplicationTable()
Dim r As Integer, c As Integer
For r = 1 To 5
For c = 1 To 5
Cells(r, c).Value = r * c
Next c
Next r
End Sub
VB❌ 弱点
- セルへ「1つずつ」書き込み → Excel との通信が多い
- 100行・100列、1万行など大きくなると一気に遅くなる
配列で高速化したバージョン(プロがよくやる技)
ポイント(初心者向けに超かんたんに)
- 配列の中で全部計算する → 最後に1回だけまとめて書く
- Excel に 25 回書くのではなく、1 回だけ書く
- これだけで何十倍も速くなることがあります
高速版コード(配列を使う)
Sub MultiplicationTable_ArrayFast()
Dim r As Long, c As Long
Dim arr As Variant
' 5×5 の配列を作る(1ベースで作る)
ReDim arr(1 To 5, 1 To 5)
' 1) Excel ではなく、配列の中に書き込む
For r = 1 To 5
For c = 1 To 5
arr(r, c) = r * c ' ← ここでは Excel に触っていない(高速)
Next c
Next r
' 2) 最後に1回だけ Excel に書き込む
Range("A1").Resize(5, 5).Value = arr
End Sub
VB仕組みのイメージ図
[通常版] [配列高速版]
r*c r*c
↓ ↓
Excel のセル 配列(arr)に保存
(合計25回) (Excelに書かない)
最後にExcelへ書くのは…
通常版 → 25回
高速版 → 1回だけ
Excel とのやり取りが 25回 → 1回 になるので速いのです。
ステップ実行で理解しやすいポイント
ReDim arr(1 To 5, 1 To 5)
→ arr が「5×5 の箱」になるarr(r,c) = r * c
→ Excel はまだ一切動いていない
→ 配列の中だけが変わる(F8 で Watch ウィンドウに arr を入れるとよく見える)Range("A1").Resize(5,5).Value = arr
→ わずか 1回 の処理で 25 セルに一気にデータが入る(最重要ポイント)
応用:サイズが変わるときでもOK(例:10×10)
配列は ReDim の数字だけ変えればOK。
ReDim arr(1 To rowCount, 1 To colCount)
VBそして書き戻すときも:
Range("A1").Resize(rowCount, colCount).Value = arr
VB実務で使うとこのように爆速化(例)
- 1万行 × 10列をループで書く
→ 10万回のセル書込 = 激遅 - 配列で計算し、最後に1回だけ書く
→ 超速い
Excel の大規模データ処理では 必須テクニック です。

