2017-09-05 14 views
0

私はvbaに特定の値を計算させ、私のスプレッドシートに回答のみを表示しようとしています。これはほとんどの場合、正常に動作していますが、私の答えの1つに丸め誤差があります。Excel VBAが自動的に四捨五入

ディスプレイ12,950.2217の代わりに関連するセルでは、12,950.9200しか表示されません。

これは私の式である:

Sheet2.Cells(i, 19).Value = Sheet2.Cells(i, 6).Value - Sheet2.Cells(i, 18).Value 

私は、これは変数の宣言とは何かを持っているが、それは正常に動作している他のすべての式のためかもしれないと想像します。

おかげ

答えて

1

プログラミングにおける丸め誤差を回避する最善の方法は、あなたが浮動小数点数で作業しているとき、小数の変換を使用することです。それは次のようになりVBAで

:.NET

cells(1,1) = CDec(cells(2,1))-CDec(cells(3,1)) 

CDecまたはdecimalのアイデアは、それが浮動小数点数の不正確さを避けることです。 Why Are Floating Point Numbers Inaccurate?

+1

浮動小数点数は正確ではありませんが、2桁の数値を減算すると元の郵便で説明されているように約0.7の誤差が生じることはありません。他にも何か間違っているはずです... – Noceo

0

セルに通貨フォーマットが適用されていると思われます。 Value2ではなく、Valueを使用します。

Sheet2.Cells(i, 19).Value2 = Sheet2.Cells(i, 6).Value2 - Sheet2.Cells(i, 18).Value2 
0

あなたのコードと間違って何もありません。したがって、コードは正しい結果を提供します。このコードを試してください。

With Sheet2.Rows(i) 
    Debug.print .Cells(19).Value = .Cells(6).Value - .Cells(18).Value 
End With 

これにより、正しい結果がイミディエイトウィンドウに印刷されます。 したがって、丸められた結果を表示するセルのNumberFormatでエラーが発生します。 Numberformatを確認してください。

0

すべての回答ありがとうございます。最後に、Value2を追加することで問題が解決されたようです。なぜ一部には小数点問題がないのか、他には小数点問題がないのかは完全には明らかではありません。小数問題が起きたのは数式がx - yだったものだけだったようです。除算と乗算を含む数式の場合はOKでした。

関連する問題