Kato Ryo Official Site

抽象度とエネルギーを上げる

【Excel VBA】 Variant型と配列の挙動の違い

2017/01/15
 
この記事を書いている人 - WRITER -
Pocket

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型変数の出力結果だ。

この記事を書いている人 - WRITER -

- Comments -

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Copyright© 抽象度とエネルギーを上げる , 2017 All Rights Reserved.