更新日:、 作成日:

VBA エラー 6 オーバーフローしました。

はじめに

Excel VBA マクロのエラー 6 「オーバーフローしました。」の対処法を紹介します。

数値型の範囲を超えた値を代入すると発生します。

エラーの基本的な対処法は、エラー箇所の特定とその原因となったコードをデバッグします。

デバッグについては「デバッグの仕方」をご覧ください。
エラー処理については「エラー処理をする」をご覧ください。

解決する

それぞれの数値型には扱える値の範囲が決まっています。その範囲を超える値を代入すると発生します。値の範囲は「変数の型やデータ型」をご覧ください。

より大きい値を扱える型を使用するか、その型に変換します。

大きい型を使用する

Byte 型の範囲は 0 ~ 255 です。0 より小さい値や 255 より大きい値を代入するとエラーが発生します。

Dim b As Byte
b = -1  ' エラー
b = 256 ' エラー

より大きな Integer や Long などの型を使用すると解決できます。

Dim i As Integer
i = -1  ' OK

Dim l As Long
l = 256 ' OK

型を変換する

計算した結果が、その型の範囲を超えるときもエラーが発生します。

v>
Dim b1 As Byte
Dim b2 As Byte
b1 = 255
b2 = 1

Dim i As Integer
i = b1 + b2 ' エラー、結果が Byte の 256 のため
i = 255 + 1 ' OK

同じ型同士で計算すると、結果もその型になります。 Byte + Byte の結果が Byte の 256 になるので、その時点でオーバーフローします。

どちらかを大きい型に「CInt 関数」などで変換してから計算すると、結果もその大きい型になるので解決できます。

Dim b1 As Byte
Dim b2 As Byte
b1 = 255
b2 = 1

Dim i As Integer
i = CInt(b1) + CInt(b2) ' OK
i = CInt(b1) + b2       ' OK、片方だけ変換しても大丈夫

コードに直接入力された数値は通常は Integer として入力されています。その範囲を超えるときは自動でその型になります。

Dim l As Long
l = 1      ' Integer の 1
l = 100000 ' Long の 100000
l = 1.5    ' Double の 1.5

l = 200 * 200       ' エラー、Integer の範囲を超えている
l = CLng(200) * 200 ' OK