更新日:、 作成日:
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
スポンサーリンク