スポンサーリンク
VBAの実行速度を速くするには、配列を利用すると良い、という記事をどこかで読んで、色々試していた。Variant型も配列も、同じように扱えるのかと思っていたが、やはり微妙に挙動が違っていたので、覚え書き的メモ。
Variant型って便利だけど、型を指定しないで使えるところが、やはりちょっと怖い気がするので、なるべく使いたくない、できれば配列で代用したい、と思っていた。だが、例えば、複数のセルの値を取り込んで、それを別のセルに書き出すような場合、Variant型だと簡単だが、配列だとちょっとだけ工夫(…という程でもないが)が必要になる、という例。
Option Explicit 'Variant型と配列での挙動の違い Public Sub sample() Dim str(1 To 20) Dim v As Variant Dim i As Integer '①A1~A20に入っているデータを Variant 型変数に読み込み、B列に出力 '→A1~A20のデータがそのままB列に書き出される v = Range("A1:A20") Range("B1:B20") = v '②A1~A20に入っているデータを配列に読み込み、C列に出力 '→A1のデータが全てのセル(C1~C20)に書き出される For i = 1 To 20 str(i) = Range("A" & i) Next i Range("C1:C20") = str '③先ほどの配列を Variant 型変数に読み込み、D列に出力 '→A1~A20のデータがそのままB列に書き出される(②と同じ結果) Erase v '先ほどの v にデータを代入しているので、念の為、一度消す v = str Range("D1:D20") = v '④配列から代入した Variant 型変数の内容を要素毎にE列に出力 '→A1~A20のデータがそのままB列に書き出される(①と同じ結果) For i = 1 To 20 Range("E" & i) = v(i) Next i End Sub
上記ソースの実行結果は以下の通り。(もちろんデータは一例。)A列は元データで、B~E列が配列やVarint型変数の出力結果だ。
