1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

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型を使用することをお勧めします。

この記事が誰かのお役に立てれば幸いです。

それでは。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?