では 「配列処理 × 図解 × 超やさしい」 で、
初心者でも 何をしているのか“感覚で分かる” レベルまで落として説明します。
まずは直感でつかむ:配列って何?
Excel の表 = そのまま配列
いきなり図で見てみましょう。
[Excel の表]
A B C
----------------
10 3 ?
20 4 ?
30 5 ?
これを VBA が読み込むと…
[二次元配列 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 の表は“そのまま配列の形”に読み込まれる
だから「配列に読み込んでから処理する」が高速。
どうやって読み込むの?
これはわずか 1 行。
Data = Range("A1:C3").Value
VB図にするとこう:
Excel の表 ─────→ Data 配列にコピー
(数十万行でも一瞬)
なぜ配列にすると 100 倍速くなるの?
Excel のセルを1個ずつ読むのは…
VBA → Excel → 値をもらう
VBA → Excel → 値を書き込む
という「行ったり来たり」が発生します。
これが めちゃくちゃ遅い原因。
配列にすると:
VBA だけで完結(メモリ上)
Excel とやり取りしない
だから爆速。
配列での処理の流れを図で理解する
プロはこの流れを必ず守ります。
Step1:Excel → 配列へ読み込む(1回だけ)
[Excel]
↓(一瞬で全部コピー)
[配列 Data]
Step2:配列の中でループ処理(数十万回でも爆速)
For r = 2 To 最終行
Data(r, 3) = Data(r, 1) * Data(r, 2)
Next r
VB図にすると:
[配列]
(r=2) 1行目を計算
(r=3) 2行目を計算
(r=4) 3行目を計算
…
Excel は一切触らない
→ ここが高速化の心臓部!
Step3:配列 → Excel へ書き戻す(1回だけ)
[配列]
↓(一気に貼り付け)
[Excel]
めちゃ簡単な例で配列処理を体感しよう
問題
A列と B列を掛け算して C列に出力せよ
(100万行でも 1 秒以内)
配列で書くとこうなる
Sub EasyArraySample()
Dim ws As Worksheet
Dim Data As Variant
Dim LastRow As Long
Dim r As Long
Set ws = ActiveSheet
'最終行だけ自動で取る
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
'Step1:配列に読み込み
Data = ws.Range("A1:C" & LastRow).Value
'Step2:配列内で処理
For r = 2 To LastRow '見出しは飛ばす
Data(r, 3) = Data(r, 1) * Data(r, 2)
Next r
'Step3:書き戻し
ws.Range("A1:C" & LastRow).Value = Data
End Sub
VB図解でさらに理解を深める
読み込んだ直後の Data
Data(1,1) Data(1,2) Data(1,3)
Data(2,1) Data(2,2) Data(2,3)
Data(3,1) Data(3,2) Data(3,3)
...
For で処理するとこう
Data(2,3) = Data(2,1) × Data(2,2)
Data(3,3) = Data(3,1) × Data(3,2)
Data(4,3) = Data(4,1) × Data(4,2)
...
Excel は一切さわらない。
全処理後に Excel に戻す
Data ──→ Excel シートへ
(1回だけ)
初心者がつまずきやすいポイントも図で説明
① 配列は 1 から始まる(基本ルール)
Excel の A1 は
Data(1,1) として入ってくる。
セル A1 → Data(1,1)
セル A2 → Data(2,1)
セル B1 → Data(1,2)
② 配列は 2次元(行 × 列)
Data(行番号, 列番号)
例:
- Data(5,1) = A5
- Data(1,3) = C1
③ Data の中は Variant 型なので何でも入る
数値・文字列・空白混在 OK。
Excel の表そのまま。
初級者が“抜け出せる”練習問題付き
練習1:A列の文字を全部大文字に
Data(r,1) = UCase(Data(r,1))
VB練習2:B列が空白の行だけ「要確認」と入れる
If Data(r,2) = "" Then
Data(r,3) = "要確認"
End If
VB練習3:A列 > 100 の行だけ背景色を黄色にするには?
※ 色は配列では変えられない → 結果リストを作る or 後で Range を使って一括処理
→ 実務的な手法 を教えられます。

