- ベストアンサー
excelのround関数での質問です
excel2000、WindowsXP proで以下のマクロを書いています ******ここから****** Sub DATA2() Dim i As Long Dim a As Long Sheets("DATA").Select i = Sheets("DATA").Cells(65535, 1).End(xlUp).Row '数量×単価の結果を四捨五入して小数点以下を切り捨てる For a = 2 To i Cells(a, 8).Value = Round(Cells(a, 6) * Cells(a, 7), 0) Next End Sub ******ここまで****** この時正しく四捨五入されない場合があります 例えば Cells(a, 6)の値が20070 Cells(a, 7)の値が61.95 の場合は答えが124337ではなく、1243336になってしまいます しかし、 Cells(a, 6)の値が11985 Cells(a, 7)の値が99.9 の場合は答えが1197302と正しくでます どこがまちがっているのか、どうしてもわかりません 申し訳ありませんが、どうか教えてください
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>どこがまちがっているのか、どうしてもわかりません 間違っているというより、Round関数の理解がちょこっと不足しているだけです。 質問の結果は間違いではなく、VBAのRound関数では正しい結果です。 VBAのRound関数とエクセルなどのワークシート関数のRound関数では 計算方法の違いにより結果に違いが出る場合があるのです。 で、普通の結果(質問者が正しいと思っている結果)を求めたい場合は、 エクセルのワークシート関数のRound関数を使わなければいけません。 = WorksheetFunction.Round(Cells(a, 6) * Cells(a, 7), 0) これだと質問者の求めたい結果がでます。 ●ワークシート関数RoundとVBAのRoundの違いは 下記マクロソフトのサイトに詳しく載ってますので一読をお勧めします。 http://support.microsoft.com/kb/225330/ja 以上。
その他の回答 (1)
- okormazd
- ベストアンサー率50% (1224/2412)
Round 関数は四捨五入ではありません。 「丸め」です。 丸め方にはいろいろありますが、IEEE 754 標準規格やJIS Z 8401で規則Aの「最近接偶数への丸め」です。 「端数が0.5より小さいなら切り捨て、端数が0.5より大きいならは切り上げ、端数がちょうど0.5なら切り捨てと切り上げのうち結果が偶数となる方へ丸める」です。 VBAは正しい処理をしています。 http://ja.wikipedia.org/wiki/%E7%AB%AF%E6%95%B0%E5%87%A6%E7%90%86#IEEE.E4.B8.B8.E3.82.81
お礼
「丸め」と「四捨五入」を混同していました その「丸め」にたくさんの種類があることもぜんぜん知りませんでした 本当にお恥ずかしい限りです ご丁寧に回答いただき大変助かりました ありがとうございました
お礼
"銀行型" の丸め処理というのをまったく知りませんでした お恥ずかしい限りです ご丁寧に回答いただき大変助かりました ありがとうございました