見出し画像

[基礎][LotusScript]Variant型で数値計算したのに、オーバーフローエラーが出る理由は?

はじめに

「O008 オーバーフローしました」という、次のようなエラーメッセージを見たことはないでしょうか?

画像1

変数や定数など、各データの「桁数」「数値」には定められた許容値があります。許容値を超える大きさが使用された場合、オーバーフローエラーが発生します。この事例では、赤くなっているラインにあるいずれかの要素のデータ型が許容値を超えています。

今回エラーが発生したのは次の行です。

x = 2000*2000

一見すると、xのデータ型が不適切であったためにエラーになったように見えます。しかしxはVariant型で定義されています。Variant型はよく、「何でも入れられる」とか、「迷ったらVariant型にしましょう」と言われます。しかし、こんな些末な計算でエラーが出るのでは案外使い辛いです。

MicroSoftのVisual Basicのドキュメントに、Variant型の数値データの扱いは、次のように記載されています。エラーが出なさそうに見えます。

数値データは、 負の値は-1.797693134862315E308 から -4.94066E-324 まで、正の値は 4.94066E-324 から 1.797693134862315E308 までのいずれの整数値または実数値を使用できます。(https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/variant-data-type

「E308」というのは、10の308乗のことです。従って「2,000*2,000 = 4,000,000」程度の数値ならば、桁数的には何の問題もなく扱えてよいはず。オーバーフローエラーが生じるのは不思議です。

今回の記事は、この理由を説明します。

原因調査1:類似の事例

ここから先は

1,579字 / 6画像

¥ 110

期間限定!PayPayで支払うと抽選でお得

サポートいただければ、記事をもっと充実することができます