SSブログ

VBA 演算子Mod・¥を使用するときの注意 [VBA]

 演算子Mod(剰余)、¥(商の整数部分)を使用する場合、他の演算子では起きない現象が起きるので、注意が必要です。

 上図画面の例をご参照下さい。

 1つ目の計算式、
? 2147483647 \ 3
では、正しく計算結果が表示されています。

 2つ目の計算式、
? 2147483648 \ 3
を入力して、Enterを押したら、図の右の「オーバーフローしました。」のエラーが表示されました。

 すでにお気づきでしょうが、「2147483647」は、長整数型の上限値です。
 演算子Mod(剰余)、¥(商の整数部分)は、長整数型の範囲でしか使用することができません。

 下図のように、通貨型変数を利用して計算を行っても、結果は同じです。
(通貨型変数の上限値は、922,337,203,685,477.5807)

 Modの行で、図のオーバーフローが発生します。

 どうやらこれらの処理は、内部処理が長整数型で行われているようで、その範囲を超える値が計算式に指定されると、オーバーフローになってしまうようです。
 通常の四則演算ではこのようなことにはならないので、長整数型の範囲を超える場合は、自前で計算式を書く必要があります。
 便利な演算子なのですが、長整数型を超える値を扱うことは良くあると思うので、使わないようにしたほうが無難かと思います。

 追記
 VB.NETは大丈夫です。(32bitを超える数値も正しく計算されます)


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。