【Excel/VBA】エラー「オーバーフローしました。」について

一生懸命書いたマクロを、いざ実行した時に、画面上にエラーが表示されることがあります。









こういった表示です。
これが起きる原因について、ご案内したいと思います。

1.データ型には許容範囲がある

以前「データ型」というものをご案内しました。
【Excel/VBA】For~Nextを使用した繰り返し処理

こちらでは、以下の2つをご案内しました。
  • Integer:整数型(-32,768 ~ 32,767)
  • String:文字列型(最大約20億文字)
ご覧いただいた通り、Integerは、数値の許容範囲が決まっています。
そのため、それを超える代入を行った場合、エラーが発生します。

2.オーバーフローの例

例えばですが、以下のようなマクロを起動してみましょう。
〜〜〜ここから〜〜〜
Sub Sample()

    Dim i As Integer
    i = 35000
    
End Sub
〜〜〜ここまで〜〜〜

当然ですが、Integerの最大値は32,767ですので、35,000は許容できません。
そのため、オーバーフローエラーが発生します。

3.回避方法

別のデータ型を設定してしまえば問題ありません。
Long:長整数型(-2,147,483,648~2,147,483,647の整数)

〜〜〜ここから〜〜〜
Sub Sample()

    Dim i As Long
    i = 35000
    
End Sub
〜〜〜ここまで〜〜〜

4.まとめ

データ型については、色々読むと「覚えろ派」と「覚えなくていい派」それぞれいらっしゃる模様です。
個人的には、都度確認していけば良く、データ型を暗記的に覚える必要は無いと思います。
エラーが起きた際に、適切に調べられることが大事ですね。


それではまた

コメント