はじめに
VBA、使ってますか?
私は嫌々ながらも使うことがあります。
今回の記事はそんなVBAについてのお話です。
なぜIntegerがだめなのか
結論から言うと、変換効率と範囲制限によるものです。
詳しく説明していきます。
Integer型は2Byte(16bit)の領域に格納され、Long型は4Byte(32bit)の領域に格納されます。
32bitのCPUでは処理単位が当然32ビットのため、16bitのInteger型は32ビットに変換してから処理されます。
この変換により、32bitのLong型の方が速くなります。
それに加え、Excel 2007以降では扱うデータ量が増えており、Integer型の32,767という最大値では不十分です。
そのため、Integer型は避けた方がいいでしょう。
比較してみる
今回比較に使用したプログラムは以下の通りです。
Sub benchmark()
Dim d1 As Double
d1 = Timer
Const MAX_RANGE As Integer = 32760
Const MIN_RANGE As Integer = -32760
Dim i As Integer
Dim addition As Integer
Dim subtraction As Integer
Dim multiplication As Integer
Dim division As Integer
Dim cnt As Integer
For cnt = 0 To 99 Step 1
For i = MIN_RANGE - 1 To MAX_RANGE - 1 Step 1
addition = i + 1
subtraction = i - 1
multiplication = i * 1
division = i / 1
Next i
Next cnt
Debug.Print "Int:" & (Timer - d1) & "秒"
Dim d2 As Double
d2 = Timer
Const MAX_RANGE_LONG As Long = 32760
Const MIN_RANGE_LONG As Long = -32760
Dim i_long As Long
Dim addition_long As Long
Dim subtraction_long As Long
Dim multiplication_long As Long
Dim division_long As Long
Dim cnt_long As Long
For cnt_long = 0 To 99 Step 1
For i_long = MIN_RANGE_LONG - 1 To MAX_RANGE_LONG - 1 Step 1
addition_long = i_long + 1
subtraction_long = i_long - 1
multiplication_long = i_long * 1
division_long = i_long / 1
Next i_long
Next cnt_long
Debug.Print "Long:" & (Timer - d2) & "秒"
End Sub
何回か実行してみましたが、3割くらいLongの方が高速でした。
さいごに
やはり、処理効率や範囲の面でLong型を使った方がいいかと思います。
プログラムのパフォーマンスを最大化するためにも、可能な限りLong型を使用することをお勧めします。
この記事が誰かのお役に立てれば幸いです。
それでは。