t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA IntegerはLongよりパフォーマンスが悪い

ついさっき知った事であるが、VBAにおいては、Integer型を使うパフォーマンス上のメリットは皆無のようだ

以下、MSDN
整数型、長整数型、およびバイト型

最近の VBA のバージョンでは、データ型が整数型と指定されている場合であっても、すべての整数値が長整数型に変換されます。

つまり、Dim x As Integerとしても、内部的にxはLongとして扱われるということ。
にもかかわらず、格納できる値の範囲は-32,768 ~ 32,767である。
むしろIntegerからLongへの変換で若干パフォーマンス上のロスが生じている。

一方、VB.NetではIntegerが整数を扱う標準的な型のような扱いである。
Integer Data Type (Visual Basic)

Integer データ型は、32 ビットのプロセッサでパフォーマンスが最大になります。 他の整数型では、メモリとの間の読み込みと格納により長い時間がかかります。

VB.NetのIntegerが扱える数値は-2,147,483,648 から 2,147,483,647であり、VBAのLong型と同じである。

ではVBAで整数を扱う場合は常にLongを使うべきかというと、私はそうは思わない。

どの言語でも、整数を扱う標準的な型は"Integer"または"Int"である。
整数の英訳はIntegerなので、まあ当たり前である。

であれば、-32,768 ~ 32,767の範囲に収まる処理においては、パフォーマンス上のメリットが無かったとしても、やはり標準的な"整数型"を指定し、これに収まらない場合に"長整数型"を用いるのが自然なプログラミング作法であると思う。

初心者にとって、Integer型のオーバーフローは型について学ぶ格好の材料になるし、ベテランにとってはLongかIntegerかで処理の規模感がわかる。

100回にも満たないループのカウンタに"長整数型"を使うのは不自然だ。
じゃあByte型はどうかというと、これも基本的には使わない。

以下、MSDNから引用

ただし、バイト型は一般的に文字列を対象にした作業で使用されます。

上記のとおり、Byte型は整数を扱う一般的な方法ではない。

整数を扱う場合、基本はInteger型、それを超える分はLong型。
今後もこの普通のスタンスでいこうと思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。