トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 新たなる挑戦編: 第14話「マクロを高速化しよう!」3/4 :配列変数で代入しよう!

やってみよう!Excel VBAで業務改善! 新たなる挑戦編|第14話 「マクロを高速化しよう!」

配列変数で代入しよう!

八木くんは満足げに、大きく首を縦に振りました。

「その通り!バリアント型の変数にセル範囲を代入すると、
勝手に二次元配列に変換し、セルの値を格納してくれるんだ。
そのとき、二次元配列はCellsプロパティ同様、"(行, 列)"の順番に格納される。
だから…」
八木くんはコードの実行をキャンセルし、次のように修正しました。

Sub Test()
    Dim v As Variant
    v = Range("A1:C2")
    v(2, 1) = "A2の値を修正"
    v(2, 2) = "B2の値を修正"
    v(2, 3) = "C2の値を修正"
    Range("A1:C2") = v
End Sub

「…当然、こんなこともできる」 八木くんがプロシージャを実行すると、セルの値が次のように書き換えられました。

「…すごい!!
これって、セルに書き込みにいってるのは、"Range("A1:C2") = v"の部分だけだよね…
なら、セルの値をどれだけ変更しても、セルへの書込みは1回で済んじゃうじゃないか…!!」
八木くんが親指を立て、ビンゴ!のジェスチャーをします。

「この部分はわかりにくいから、図を使って解説するか…」

「この図の通り、セル範囲をバリアント型の変数に格納すると、自動的に二次元配列を作ってくれる。
あとはこの、二次元配列の値を必要に応じて修正し、元のセル範囲に代入すればいい。
数百件程度のデータの書き込みは問題ないけど、数千件を超えるデータの書き込みでは、
目に見えてマクロの実行速度が遅くなる。
そんなとき必須なのが、この配列変数による代入のテクニックだよ」
…八木くんの解説が続きます。

一覧にもどる