実行時エラー6「オーバーフローしました。」の原因・解決方法

エラー内容

VBA実行時に、実行時エラー6「オーバーフローしました。」と表示される。

原因と解決方法

3つの原因と、その解決方法が考えられます。

原因1. 変数に大きすぎる値を格納

解説

VBAの型にはそれぞれ、格納できる値の範囲があります。

例えばInteger型の場合、格納できる値の範囲は-32,768~32,767です。

なので、Integer型の変数に、40,000など大きすぎる値を格納しようとするとエラーが発生します。

 

解決方法

変数の型を、格納したい値に対応した型に修正します。

サンプルソースの場合、40,000が格納できるLong型(-2,147,483,648~2,147,483,647)に修正します。

 

原因2. 計算結果が、計算元の型より大きい

解説

VBAではかけ算などの計算を行う時、計算対象の数値の中で1番大きい型に一度計算結果を格納します。

たとえばInteger型とLong型のかけ算の場合、計算結果をLong型に格納しようとします。

 

サンプルソースでは、400と100どちらもInteger型なので、VBAは計算結果を一度Integer型に格納しようとします。

でも、計算結果の40,000はInter型の最大値より大きいので、オーバーフローとなってしまいます。

 

解決方法

計算に使う数値の中で1番大きい型にVBAは計算結果を格納するので、今回のサンプルソースの場合は、400か100どちらかをCLng関数でLong型に変換します。

そうすると計算結果はLong型に格納されるので、エラーは発生しません。

 

このエラーは原因知らないと「なんで???」となっちゃいます。
ソース見る限り、まったく間違いを見つけられないので・・・

解決方法を見て、「計算結果をLong型の変数に格納すればいいじゃん!」と思うかもしれません。

でも、VBAは計算した時点でいったん計算結果を格納するので、次のプログラムのように計算結果をLong型に格納しようとしてもエラーが発生します。

なので、この場合も右辺の計算の時点で、400か100どちらかをCLng関数でLong型に変換しないといけません。

 

原因3. 型変換の数値が大きすぎる

解説

数値の型変換を行った時に変換後の数値が、変換後の型の最大値より大きい時に発生します。

サンプルソースでは、Integer型の最大値より大きな値40000をInteger型に変換しようとしているからです。

 

解決方法

変換後の数値に対応した型変換に修正します。

サンプルソースの場合は、Cint関数をClng関数に修正すれば、40000を問題なく数値に変換できます。

 

関連記事

VBAエラー原因・解決方法
成果を出す5つのポイント
VBAエラー原因・解決方法
えくとしょ | 初心者のためのエクセルとVBAの図書館
タイトルとURLをコピーしました