これ、要するに「バリアント型は遅いから、ちゃんと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 は型指定を省略していますから、どちらもバリアント型ですよ。