Excel VBA | Excel VBA:配列 × 自動範囲 × 高速処理 完全入門講座(図解付き)

Excel VBA VBA
スポンサーリンク

では 「図解付き/配列 × 自動範囲 × 高速処理の “完全入門講座”」
初心者でも 迷わず実務に投入できる レベルで作ります。


講座のゴール

この講座を終えると、あなたは:

  • 数十万行でも 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 に何度も触ると遅い
  • なぜ配列にすると高速?
  • 配列に読み込む方法は?
  • 配列処理のループの書きかたは?
  • 最後にどうやって書き戻す?
  • 自動範囲取得の公式は?

ここまで理解できれば プロと同じ高速化ができる ようになります。

タイトルとURLをコピーしました