2020-02-05

VBAの整数型「Integer」は2バイト(-32,768~32,767)なので要注意

今回の仕事では、かなり久しぶりにVBAを使いました。

そこで問題が発生するまで気が付かなかったのがIntegerのバイト数(2バイト、-32,768~32,767)。一般的なIntegerは4バイト(-2,147,483,648~2,147,483,647)のイメージなので、久しぶりにVBAを扱う場合は注意が必要です。

Integer型とLong型について

VBAのIntegerは2バイト(-32,768~32,767)なので、桁数の多い計算式などの変数で使用すると桁が不足することが多いです。


Dim totalPrice As Integer
totalPrice = 30000
totalPrice = totalPrice + 10000

上記のようなコードを実行するとエラー(オーバーフロー)が発生します。

そのため、VBAの場合、普段はLong型を使用するようにしておくと安心です。


Dim totalPrice As Long
totalPrice = 30000
totalPrice = totalPrice + 10000

ちなみに以下のような書き方をする機会はほとんどありませんが、これはエラーが発生します。


Dim totalPrice As Long
totalPrice = 10000 + 20000 + 30000

エラー発生の原因は計算処理がIntegerで行われているせいなので、これを回避するにはCLng()でLong型にキャストする必要があります。


Dim totalPrice As Long
totalPrice = CLng(10000) + 20000 + 30000

VBA以外の4バイトのInteger(int)を普段扱っているとあまり気にしないので、こんなところでエラーが発生すると驚きますね。

Access】関連記事