アーシの毎日インプット

毎日1つ以上学習する。学習した内容を公開する。を目標に自分のスキルアップを目指します。

VBAのLong型はInteger型より高速で処理できる

スポンサードリンク

仕事でJavaの処理時間に関して調べている時、VBAに関する面白い記述を見つけました。

www.banana-juice.com

 

VBAだと、Integer型とLong型だとLong型の方が処理性能が良いというのです

 

VBAで使用できる

Integer型は-32768~32767の整数

Long型は-2147483,648~2147483647の整数

 

JavaのInteger型は-2147483,648~2147483647の整数を取れるのでVBAの型のサイズが小さく感じます。

 

プログラミングをしている身としてはInteger型よりLong型の方が処理性能が良いというのはにわかには信じられませんでした。

 

一般的には桁数上限が小さい型の方がメモリ使用量が小さく、処理にかかる時間が小さいんです。

 

ということで、自分で実際にInteger型とLong型処理を作り、処理時間の計測を行いました。

 

【Integer型の処理】

Sub int型()
Dim startTimer As Double
Dim endTimer As Double
Const MAX_MATH As Integer = 10000
Const MIN_MATH As Integer = -10000
Dim integerValue As Integer
Dim 和 As Integer
Dim 差 As Integer
Dim 積 As Integer
Dim 商 As Integer
Dim 余 As Integer
Dim cnt As Integer

startTimer = Timer
'処理回数を増やすため10000回ループさせます。
For cnt = 0 To 9999 Step 1
' (-10000~10000の間の値で簡単な演算を行います)
For integerValue = MIN_MATH To MAX_MATH Step 1
和 = integerValue + 2
差 = integerValue - 2
積 = integerValue * 2
商 = integerValue / 2
余 = integerValue Mod 2
Next integerValue
Next cnt

endTimer = Timer

MsgBox "Integer型処理" & endTimer - startTimer & "秒"
End Sub

【Long型の処理】

Sub long型()
Const MAX_MATH As Long = 10000
Const MIN_MATH As Long = -10000
Dim longValue As Long
Dim 和 As Long
Dim 差 As Long
Dim 積 As Long
Dim 商 As Long
Dim 余 As Long
Dim cnt As Long

startTimer = Timer
'処理回数を増やすため10000回ループさせます。
For cnt = 0 To 9999 Step 1
' (-10000~10000の間の値で簡単な演算を行います)
For longValue = MIN_MATH To MAX_MATH Step 1
和 = longValue + 2
差 = longValue - 2
積 = longValue * 2
商 = longValue / 2
余 = longValue Mod 2
Next longValue
Next cnt

endTimer = Timer

MsgBox "Long型処理" & endTimer - startTimer & "秒"
End Sub

 

どちらの処理も「和差積商余」を求める5つの計算を-10000~10000の2万1種類の数をベースに計算させることを1万回ループさせる。

すなわち、5×20001×10000で10億5万回の計算を行う処理となっています。

 

そして、それらを10回ずつ実行し、平均処理時間を測定しました。

  Integer型 Long型
2回目 5.625 5.515625
1回目 5.66796875 5.542969
2回目 5.625 5.515625
3回目 5.59375 5.671875
4回目 5.6875 5.605469
5回目 5.734375 5.527344
6回目 5.69921875 5.53125
7回目 5.69921875 5.761719
8回目 5.734375 5.699219
9回目 5.703125 5.71875
10回目 5.859375 5.734375
平均値 5.700390625 5.6308595

 

測定した結果、若干ではありますが、見事にLong型の方が処理時間が小さくなっていることがわかりました!

 

この結果には驚きです。

 

VBAで今後数値を定義する時は常にLong型を定義していこうかと思います。

f:id:arshii:20200908145015p:plain

もうちょっと調べてみたらより理解が深まる記事がありました。

moripro.net

【アーシの原点】

【頭を鍛える迷路集】


スポンサードリンク