配列変数で代入しよう!
八木くんは満足げに、大きく首を縦に振りました。
「その通り!バリアント型の変数にセル範囲を代入すると、
勝手に二次元配列に変換し、セルの値を格納してくれるんだ。
そのとき、二次元配列は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回で済んじゃうじゃないか…!!」
八木くんが親指を立て、ビンゴ!のジェスチャーをします。
「この部分はわかりにくいから、図を使って解説するか…」
「この図の通り、セル範囲をバリアント型の変数に格納すると、自動的に二次元配列を作ってくれる。
あとはこの、二次元配列の値を必要に応じて修正し、元のセル範囲に代入すればいい。
数百件程度のデータの書き込みは問題ないけど、数千件を超えるデータの書き込みでは、
目に見えてマクロの実行速度が遅くなる。
そんなとき必須なのが、この配列変数による代入のテクニックだよ」
…八木くんの解説が続きます。