では 「図解付き/配列 × 自動範囲 × 高速処理の “完全入門講座”」 を
初心者でも 迷わず実務に投入できる レベルで作ります。
講座のゴール
この講座を終えると、あなたは:
- 数十万行でも 1 秒以内で処理できるマクロが書ける
Cellsの正しい使い方(触るのは範囲取得のときだけ)が分かる- 「読み込み → 配列で高速処理 → 書き戻し」という
プロの高速化フローを完全に理解できる - 実務で使えるテンプレートをそのまま作れる
第1章:なぜ Excel は遅い?
Excel が遅くなる最大原因はこれ:
VBA → Excel → VBA → Excel → VBA …
セルを何度も触ると、
この “行ったり来たり” が膨大に起きて 激遅 になります。
解決法 = Excel を触らない
そこでプロはこうします:
① Excel → 配列(1回)
② 配列の中で全部処理(高速)
③ 配列 → Excel(1回)
このやり方だと、
Excel と通信するのが たった 2 回 なので爆速。
第2章:図で理解!配列は Excel の縮小コピー
まず Excel の表を
A B C
----------------
10 3 ?
20 4 ?
30 5 ?
図で配列にするとこうなります:
[配列 Data の中身]
Data(1,1) = 10 Data(1,2) = 3 Data(1,3) = ?
Data(2,1) = 20 Data(2,2) = 4 Data(2,3) = ?
Data(3,1) = 30 Data(3,2) = 5 Data(3,3) = ?
▶ Excel の表がそのまま二次元配列になる
第3章:自動で「最終行・最終列」を取る技術
高速化に必須なのが 動く表の範囲を自動特定すること。
最終行の取得
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
VB最終列の取得
LastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
VB図で表すと:
最下行から上へ ↑ ← 最終行を発見
1行目 →→→ 左へ ← 最終列を発見
第4章:表全体を配列に読み込む(1行でOK)
Data = ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).Value
VB図解:
[Excel の表全体]
↓(丸ごとコピー)
[配列 Data]
第5章:配列の中で高速処理をする(これが心臓部)
普通の初心者はこう書きます:
Cells(r, 3).Value = Cells(r, 1).Value * Cells(r, 2).Value
VBこれは Excel を毎回触るので超遅い。
配列版はこう:
Data(r, 3) = Data(r, 1) * Data(r, 2)
VB図で説明:
Excel を触らず配列だけで処理
(100 万回回しても高速)
第6章:処理後に一括書き戻し(1行)
ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).Value = Data
VB図解:
配列 → Excel(1回書くだけ)
これで 数十万行でも一瞬。
第7章:フル高速テンプレート(実務仕様)
このコードさえあれば、
どの表でも 自動範囲 × 配列 × 高速処理 ができるようになります。
Sub SuperFast_CompleteTemplate()
Dim ws As Worksheet
Dim LastRow As Long, LastCol As Long
Dim Data As Variant
Dim r As Long
Set ws = ActiveSheet
'--- ① 自動でデータ範囲を検出 ---
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
LastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
'--- ② 配列に読み込み(爆速) ---
Data = ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).Value
'--- ③ 配列の中で高速処理 ---
For r = 2 To LastRow
'処理例(自由に書き換え可能)
Data(r, 3) = Data(r, 1) * Data(r, 2)
Next r
'--- ④ 一括書き戻し ---
ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol)).Value = Data
MsgBox "処理完了!(数十万行でも1秒以内)"
End Sub
VB第8章:配列でよくある質問(図解付き)
Q1. 配列は 0 から始まるの?
Excel を丸ごと読み込んだ配列は 1 から始まる。
セル A1 → Data(1,1)
Q2. 列番号はどう考えるの?
1 = A列
2 = B列
3 = C列
図:
A列 → 1
B列 → 2
C列 → 3
Q3. 空白セルは何になる?
→ 空文字 (“”) になる。
そのまま扱ってOK。
第9章:練習問題(図解付きで理解が進む)
練習1:A列の文字列を全部大文字にせよ
Data(r,1) = UCase(Data(r,1))
VB図:
"hoge" → "HOGE"
"abc" → "ABC"
練習2:B列が空の行だけ「要確認」と記入
If Data(r,2) = "" Then
Data(r,3) = "要確認"
End If
VB図:
[ B列 ] が空白
↓
C列に「要確認」
練習3:A列の数値が 100 以上の行だけ別リストへ抽出
→ これは配列 × Dictionary で爆速版を作れます。
必要なら続編を作ります!
第10章:完全理解チェック
- Excel に何度も触ると遅い
- なぜ配列にすると高速?
- 配列に読み込む方法は?
- 配列処理のループの書きかたは?
- 最後にどうやって書き戻す?
- 自動範囲取得の公式は?
ここまで理解できれば プロと同じ高速化ができる ようになります。

