VBAで自動化

【VBA】「 オーバーフローしました」とはなぜ起きるか

変数に指定された型の容量を超えるデータを格納しようとしたのがエラーの原因です。

具体的に言うと、変数のデータ型の許容範囲を超える値が割り当てられた場合にこのエラーが表示されます。開発時に扱うデータの種類と変数型に注意が必要ということです。

オーバーフローが起きる主なパターン集

 

変数の型の許容範囲を超える値の割り当てた

Dim myVar As Byte
myVar = 256 ' Byte型は0から255までの範囲しか許容しないため、エラーが発生する

計算結果が変数の型の許容範囲を超えている

Dim myVar As Integer
myVar = 32767 + 1 ' Integer型は-32,768から32,767までの範囲なので、エラーが発生する

変換関数を使用して、許容範囲を超える値を別の型に変換しようとした

Dim myVar As Long
Dim result As Integer
myVar = 32768
result = CInt(myVar) ' この時点でオーバーフローエラーが発生する

データ型を指定せずに大きな数値を代入する

Variant 型は異なるデータ型を自動的に扱うことができる一方、特定の演算で内部の型としてIntegerが選択されるとオーバーフローエラーが発生する可能性があります。

エラーを回避する方法

データ型を明示的に指定する: 許容範囲を考慮して適切なデータ型を選ぶことで、予期しないオーバーフローエラーを防ぐことができます。
計算前の範囲チェック: 大きな計算を行う前に、その結果がデータ型の許容範囲を超えないか確認することで、エラーを回避できます。
エラーハンドリングの使用: On Error ステートメントを使用して、エラーが発生した場合の処理を指定することができます。

-VBAで自動化