Excel VBA | 配列処理を初心者向けに、図解でさらにやさしく

Excel VBA VBA
スポンサーリンク

では 「配列処理 × 図解 × 超やさしい」 で、
初心者でも 何をしているのか“感覚で分かる” レベルまで落として説明します。


まずは直感でつかむ:配列って何?

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 を使って一括処理
実務的な手法 を教えられます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました