2017-06-06 4 views
3

次のプログラムを実行していて、プログラムがaになると最初の繰り返しでオーバーフローエラーが発生します。私が理解しているように、これは、容量がばかげているDoublesとLongを使用しているために起こるべきではありませんが、現時点では最大100にすぎないので、これは問題ではないはずです。ここに私のオリジナルの入力です:実行時エラー6 vbaでオーバーフローしてExcel用

h0 = 1000, v0 = 0, a0 = g = -9.80665, dt = .01, m = 752.2528, b = .287875 

を、ここのコードです:これは簡単な修正です

Sub drag() 
    Dim h0 As Double 
    Dim v0 As Double 
    Dim a0 As Double 
    Dim dt As Double 
    Dim m As Double 
    Dim b As Double 
    Dim g As Double 
    Dim i As Long 
    Dim h As Double 
    Dim v As Double 
    Dim a As Double 

    h0 = Worksheets("Drag").Cells(2, 8).Value 
    v0 = Worksheets("Drag").Cells(2, 9).Value 
    a0 = Worksheets("Drag").Cells(2, 10).Value 
    g = Worksheets("Drag").Cells(2, 10).Value 
    dt = Worksheets("Drag").Cells(2, 7).Value 
    m = Worksheets("Drag").Cells(2, 4).Value 
    b = Worksheets("Drag").Cells(2, 5).Value 
    Debug.Print h0 & v0 & a0 & dt & m & b 

    For i = 1 To 100 
     v = v0 + a0 * dt 
     h = 0.5 * a0 * (dt^2) + v0 * dt + h0 
     a = m * g - b * (v^2) 'Line where overflow occurs 
     v0 = v 
     h0 = h 
     a0 = a 
     Cells(i + 2, 8) = h0 
     Cells(i + 2, 9) = v0 
     Cells(i + 2, 10) = a0 
     Next i 
    Debug.Print h0 & v0 & a0 & dt & m & b 
End Sub 

希望。

+4

'i = 14'(ループを14回通過)と' v = -1.689 x 10^209'のときにオーバーフローが発生します。あなたがしようとしていることは分かりませんが、「v」が爆発しています。あなたが何をしようとしているのかを記述すれば、助けになります。 –

+0

@ジョンコールマン私は今問題を見る、私はドラッグの方程式をやっているし、私はm、感謝の言葉で分けることを忘れていた。 – Anthrochange

+0

FWIW **は計算条件や数式を説明するコメントのための** **募集です**。または意味のある識別子。または両方。 –

答えて

5

i = 14(ループを14回通過)とv = -1.689×10^209のとき、オーバーフローが発生します。私はあなたが何をしようとしているのか分からないが、vは爆発している。あなたが何をしようとしているのかを記述すれば、助けになります。 - ジョン・コールマン17分ago

@John Coleman私は今問題を見ると、私はドラッグの方程式をしています、そして、私は項をmで分けるのを忘れました。 - アンソロジー9分前

あなたはすでに何が行われるべきかを特定しました。

オーバーフローがなぜm * g - b * (v^2)にあるのかについての説明を今すぐにしてください。

以下のように私はv = v0 + a0 * dt後前とスクリーンショットの後v = v0 + a0 * dt

が計算され

enter image description here

が計算され考えてみましょう時計を追加

enter image description here

ここに表示されている内容は非常に特殊な動作です。 AタイプDoubleIntegerに変更

これは正常ではなく、これまでに経験したことです。残念ながら、この問題は長い間Excelに存在しており、残念ながらExcel 2016にも存在します。非常に大きな数を使用している場合にのみ発生します。この種のバグは非常にまれですが、そうです。

一つはMODを使用している場合、下記のリンクで述べたように、あなたは二重のように定義された。オーバーフローを取得している問題の変数をv

The MOD Function

+0

Aiie、オーバーフローの前にそのような "変態"が起こる可能性はありますか?あるいは、On Error Resume Nextを使ってエラーをスキップした場合は、そのまま続行しますか? –

+0

はい、OERNを使用してエラーを無視できますが、結果の精度はテストしていません。私はまた、データ型がDoubleに変更されることを疑う。 –

1

の経験の似たようなものを持っていることができますつまり、1.79769313486232 * 10^308〜4.94065645841247 * 10^-324の範囲の数値のみを入力できることを意味します。 VBAは、ダブルデータを保持するために8バイトを使用します。この巨大な範囲外の数値はオーバーフローを引き起こします。 (here DBAデータタイプの詳細については

あなたはどのくらいの数字を期待していますか? A rough estimate fo the number of atoms in the universeは1 * 10^82で、double値の範囲はほぼ2 * 10^308になります。大きい数値で作業する必要がある場合は、differentmethodを使用する必要があります。これは、単に標準のVBAデータ型に収まらないためです。

関連する問題