Integer型とLong型による処理速度の差

変数で整数を扱うものとして,整数型(Integer)と長整数型(Long)があります。
記憶領域や扱える範囲は,以下の通りです。

データ型  記憶領域  範囲 
整数型(Integer) 2バイト −32,768〜32,767
長整数型(Integer) 4バイト −2,147,483,648〜2,147,483,647

私が扱うマクロでは,整数値で30000もあれば事足りるので,何の疑問もなくInteger型を使ってきました。
しかし,先日,マクロを介して知り合ったT氏から,「32ビットなら,Integer型よりLong型の方が処理が速いよ。」との
アドバイスをいただきました。
そこで,実際に実験して調べてみることにしました。

1.マクロの準備

 速度を調べるマクロは,HP「VBA性能向上委員会」で処理速度の比較をしている記事があったので,
 私も同じものを使って検証することにしました。  ※著作権等で問題があれば,お知らせ下さい。 

Sub int型()

Const INT_MAX As Integer = 32767
Const INT_MIN As Integer = -32768

Dim i As Integer
Dim 和 As Integer
Dim 差 As Integer
Dim 積 As Integer
Dim 商 As Integer
Dim 余 As Integer
Dim cnt As Integer
Dim S As Single
Dim G As Single
Dim R As Integer

For R = 2 To 11

  S = Timer

  For cnt = 1 To 1000

    For i = INT_MIN + 1 To INT_MAX - 1
      和 = i + 1
      差 = i - 1
      積 = i * 1
      商 = i / 1
      余 = i Mod 1
    Next i
  Next cnt

  G = Timer
  Cells(R, 2) = G - S
Next R

MsgBox "Finish!"

End Sub 
 Sub long型()

Const INT_MAX As Long = 32767
Const INT_MIN As Long = -32768

Dim l As Long
Dim 和 As Long
Dim 差 As Long
Dim 積 As Long
Dim 商 As Long
Dim 余 As Long
Dim cnt As Long
Dim S As Single
Dim G As Single
Dim R As Long

For R = 2 To 11

  S = Timer

  For cnt = 1 To 1000

    For l = INT_MIN + 1 To INT_MAX - 1
      和 = l + 1
      差 = l - 1
      積 = l * 1
      商 = l / 1
      余 = l Mod 1
    Next l
  Next cnt

  G = Timer
  Cells(R, 3) = G - S
Next R

MsgBox "Finish!"

End Sub
・マクロは,変数の宣言を変えた以外は,まったく同じです。
・計算の範囲は,Integer型で扱える範囲の下限から上限までにし,それでもかかる時間が短いため,それを1000回繰り返す処理にしました。
・正確なデータを取るため,Timer関数を使って10回測定し,結果をワークシートに書き込むようにしました。(AVERAGE関数は,処理が終わった後に,書き込みました。 )

2.実験結果

 2020年に,もう一度,実験してみました。 
 すると,どちらもLong型の方が,処理速度が速かったです。
 これからは,整数はLong型の方がよさそうですね。

   A    B 
  Integer型  Long型   Integer型  Long型
 1回目  2.828125  2.828125  1回目  14.26171875  13.7421875
 2回目  2.90625  2.91015625  2回目  14.25390625  13.73046875
 3回目  3.015625  2.765625  3回目  14.2265625  13.73046875
 4回目  3.015625  2.703125  4回目  14.21875  13.71875
 5回目  2.890625  2.71875  5回目  14.23046875  13.73828125
 6回目  2.921875  2.828125  6回目  14.21484375  13.73046875
 7回目  2.84375  2.84375  7回目  14.25  13.73828125
 8回目  2.828125  2.76953125  8回目  14.25  13.7578125
 9回目  2.890625  2.765625  9回目  14.24609375  13.734375
 10回目  2.984375  2.796875  10回目  14.23046875  13.734375
 平均  2.9125  2.792969  平均  14.23828  13.73555
           
 OS  Windows10    OS   Windows10  
 CPU  Core i7    CPU  Pentium  
   2.93GHz      2.16GHz  
 メモリ  8.00GB    メモリ  4.00GB  
 システム  64Bit    システム   64Bit  
 Excel  2016    Excel  2016  
   32bit版      32bit版  
 結果      結果    


--------以下の実験は,2014年の記事です。--------
 ワークシートに時間を書き込んで,一覧にしたものが以下の表です。

  A B   C   D  
Integer Long Integer Long Integer Long Integer Long
1回目 2.84375 3.671875 1回目 4.9609375 5.0390625 1回目 5.0078125 4.49609375 1回目 7.54296875 6.1640625
2回目 2.8046875 3.609375 2回目 4.9140625 4.9921875 2回目 4.90234375 4.32421875 2回目 7.46875 6.171875
3回目 2.828125 3.6015625 3回目 4.8828125 4.9921875 3回目 4.9765625 4.49609375 3回目 7.4375 6.17578125
4回目 2.8203125 3.6640625 4回目 4.9453125 4.9609375 4回目 4.79296875 4.3671875 4回目 7.453125 6.17578125
5回目 2.8046875 3.5859375 5回目 4.9140625 4.9765625 5回目 4.87109375 4.55859375 5回目 7.4375 6.17578125
6回目 2.890625 3.6171875 6回目 4.8515625 4.9609375 6回目 4.8828125 4.33984375 6回目 7.41015625 6.17578125
7回目 2.8671875 3.5859375 7回目 4.9453125 4.9921875 7回目 4.90234375 4.37109375 7回目 7.4375 6.17578125
8回目 2.8203125 3.703125 8回目 4.9765625 4.9765625 8回目 4.9609375 4.3046875 8回目 7.421875 6.17578125
9回目 2.8359375 3.6875 9回目 4.8515625 5.0390625 9回目 5.02734375 4.43359375 9回目 7.421875 6.20703125
10回目 2.90625 3.59375 10回目 4.8828125 5.0390625 10回目 4.90234375 4.32421875 10回目 7.4375 6.171875
平均 2.8421875 3.63203125 平均 4.9125 4.996875 平均 4.92265625 4.4015625 平均 7.446875 6.176953125
対比 78% 128% 対比 98% 102% 対比 112% 89% 対比 121% 83%
OS Windows7 OS Windows7 OS Vista Business OS XP
CPU Core i7 CPU Core 2 Duo CPU Core 2 Duo CPU Celeron M
2.93GHz 2.10GHz 2.40GHz 1.73GHz
メモリ 8.00GB メモリ 2.00GB メモリ 2.00GB メモリ 1.99GB
システム 64Bit システム 32Bit システム 32Bit システム 32Bit
Excel 2010 Excel 2007 Excel 2007 Excel 2002
  32bit版      32bit版     32bit版      32bit版  
 結果 Integer     結果 Integer     結果    Long  結果    Long

 この結果を見る限りでは,古い機種だとそうなるということですかね。
 AとBはうちのシステムなので,うちでは今まで通りInteger型を使っていくことになります。
 また,ネットでいろいろと調べてみると,ここでわずかな時間を気にするよりも,もっと大きく時間を詰めることのできる部分が他にあるはずなので,
 処理の仕方や順番などで改良した方が,より処理時間を短くできるだろうとのことでした。私もそう思います。
 
 今回の実験で不思議に思ったのは,BとCが同じCPUで,32ビットパソコンで,エクセルのバージョンも同じなのに,結果が違ってきていること。
 原因として残るのは,OSの違いくらいなんだけれど,そういうことってあるんですかね。