「0 で除算しました。」の原因と対策

中級VBA

割り算は分母が0になる事を想定しておく

 数学では割り算の分母が0になると計算できない事になっています。プログラムの途中で割り算を行うような場合は、分母が0にならないかを想定しておく必要があります。

 開発中に上手く動いていたとしても割り算の分母には気を配るようにしましょう。

エラーの発生例

Sub error0()
    Dim d As Long
    
    Range("A1") = 100 / d
End Sub

 この例では、整数型の d を宣言していますが、それと同時に整数型は 0 で初期化されるので、d に0を代入したつもりは無くても分母は d = 0となりエラーが発生します。

Sub error1()
    Dim d As Long
    
    If d = 0 Then
        Range("A1") = ""
    Else
        Range("A1") = 100 / d
    End If
    
End Sub

 基本的にはdを監視して 0 となる場合は、別の処理を行えばエラーは回避できます。

オーバーフローが発生する場合も

 0で除算したにもかかわらず「オーバーフローしました」のエラーが発生する場合もあります。
詳しくは、以下のページで解説しています。
「オーバーフローしました。」の原因と対策

 この場合は、分子も0になっている場合にオーバーフローになるようです。

Sub error0()
    Dim d As Long, m As Long
    Range("A1") = m / d
End Sub

まとめ

 エラーの出方を観察しますと、分母のみが0になる場合は、「0で除算しました。」となり、分子も0の場合は、「オーバーフローしました。」となるようです。

 対策としては、分母を監視して0となる場合には分岐させて別の処理を行うようにすれば良いでしょう。

コメント

タイトルとURLをコピーしました