型を指定する


これ、要するに「バリアント型は遅いから、ちゃんとLong型などを指定しよう」という話なのですが、これも昔の話です。理論的には、バリアント型は遅いです。デカイですから。でも、そうした理論的な差って、現在の高性能PCにとって誤差みたいなものです。試してみましょうか。

Sub Test1()
    Dim i As Long
    For i = 1 To 10000
        Cells(i, 1) = 100
    Next i
End Sub

Sub Test2()
    Dim i As Variant
    For i = 1 To 10000
        Cells(i, 1) = 100
    Next i
End Sub
Long Variant %
1 4.390 3.672 83.6%
2 3.594 3.609 100.4%
3 3.656 3.610 98.7%
4 3.734 3.610 96.7%
5 3.625 3.578 98.7%
6 3.641 3.828 105.1%
7 3.672 3.640 99.1%
8 3.594 4.204 117.0%
9 4.250 3.578 84.2%
10 3.594 3.875 107.8%
平均 3.775 3.720 98.6%

ほとんど変わりませんね。もっと多くのバリアント型変数を使ってみましょうか。

Sub Test3()
    Dim i As Long, A As Long, B  As Long, C As String
    For i = 1 To 10000
        A = 100
        B = 2
        C = "tanaka"
        Cells(i, 1) = C & A * 2
    Next i
End Sub

Sub Test4()
    Dim i As Variant, A As Variant, B As Variant, C As Variant
    For i = 1 To 10000
        A = 100
        B = 2
        C = "tanaka"
        Cells(i, 1) = C & A * 2
    Next i
End Sub

「Cells(i, 1) = C & A * 2」って、あまり良い書き方ではありませんけど、まぁここはひとつ大目に見てください。

Long Variant %
1 3.844 3.890 101.2%
2 3.813 3.891 102.0%
3 4.078 4.188 102.7%
4 4.468 4.235 94.8%
5 3.844 3.921 102.0%
6 4.141 3.813 92.1%
7 3.843 3.984 103.7%
8 3.829 4.250 111.0%
9 3.797 3.797 100.0%
10 3.797 3.875 102.1%
平均 3.945 3.984 101.0%

大きな速度差はありませんね。バリアント型の遅さも、昔の古いスペックのPCだと顕著だったのですが、現在使われている高性能のPCでは、ほとんど気にする必要はないということですね。ただ、それでも未だに「バリアント型は遅い」って言ってる人は多いです。こうして、自分で検証してみれば"遅くない"って分かるのに。つーことはですよ「バリアント型は遅い」と言ってる人は、自分で試していないということですよね。あれ?おかしいですよね。自分で試していないのに、何を根拠に「バリアント型は遅い」と言うのでしょう。根拠はこれしかありませんよね「だって~ネットに書いてあったから~」。

ちなみにですけど「バリアント型は遅いから使っちゃダメ」と言ってるくせに、よく次のようなコードを見かけます。

Dim A, B, C As Long

これ、Long型になるのは変数 C だけですよ。変数 A と変数 B は型指定を省略していますから、どちらもバリアント型ですよ。