Excel VBA | セルを扱う方法

VBA
スポンサーリンク

ここでは 例題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回 になるので速いのです。


ステップ実行で理解しやすいポイント

  1. ReDim arr(1 To 5, 1 To 5)
     → arr が「5×5 の箱」になる
  2. arr(r,c) = r * c
     → Excel はまだ一切動いていない
     → 配列の中だけが変わる(F8 で Watch ウィンドウに arr を入れるとよく見える)
  3. 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 の大規模データ処理では 必須テクニック です。

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