- ベストアンサー
エクセルのROUND関数の合計結果が1つずれる理由と正しい計算方法
- エクセルのROUND関数について、四捨五入を利用して整数の合計を求める方法がありますが、実際には合計の結果が1つずれることがあります。
- これは、ROUND関数が四捨五入ではなく、偶数への丸め方針を採用しているためです。
- 正しい計算方法としては、ROUND関数で整数に丸めた値を合計するのではなく、ROUND関数を用いずに値を足し合わせる方法を使用することです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
簡単な実験をしてみましょう。 単純な整数を得る四捨五入式 =ROUND(A1,0) を =ROUND(ROUND(A1,5),0) に変更してみてください。 四捨五入する対象範囲が A1:A5 なら計算範囲内の各セルの内容は次のようになりますね。 =ROUND(ROUND(A1,5),0) =ROUND(ROUND(A2,5),0) =ROUND(ROUND(A3,5),0) =ROUND(ROUND(A4,5),0) =ROUND(ROUND(A5,5),0) この範囲が B!:B5 の場合、答えの合計式 =SUM(B1:B5) の結果はどうなりますか? 貴方の希望通りピッタンコになりませんか? 【備考】上式中の 5 は此れに限らず 3~10の数値でも構いません。
その他の回答 (5)
- keithin
- ベストアンサー率66% (5278/7941)
元のご相談: >ある計算を ROUND でやり、答えを 四捨五入して整数で出します。 多分この辺から、全然間違ってます。 あるA1セルに =10/3 と記入し、セルの書式で 3 と表示させます。 もうあと2つ同じ計算セルをA2とA3にも並べて、 =SUM(A1:A3) と合計すると、10が計算されて9と1違います。 でも、こういうのを「ROUNDでやる」とは全く言いません。あなたの言葉遣いが間違いです。 再掲: >=ある計算 >という式をROUND関数で整数に丸めるには >=ROUND(ある計算式,0) >という数式にします。 =10/3 という計算式があるA1セルに記入してあったら、このA1セルの数式を =ROUND(10/3,0) という式に書き換えて計算するのが「ROUNDする」という意味です。 端数が出てくる「すべてのセルのいまの数式」を、 =ROUND(ある計算式,0) に漏れなく全部丁寧に書き換えてください。 #補足 >私のやった書式(計算を)しっかりそのまま、載せた方が教えて頂く方にも分かりやすかったですね。 そう思ったら、どうして実際の数式を補足しないのですか? 思っただけで終わってしまいましたね。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
>ROUND は四捨五入 になると思いますが、 そうですね。 >単純に ROUNDで整数にしたのだから、合計も整数で合うはずだと思うのですが、 そのとおりです。 >なぜか、合計が 1 違う場合が多々あります。 正しい数式が記述されていれば、そうはなりません。 >126 とか 124 と 1つ ずれて表示されてしまいます。 その人のスキル次第で、様々な原因が考えられます。 >私のROUNDに関する覚え方が間違っているのでしょうか? 果たして ROUND 関数だけの問題なのかどうかも不明ですが、何かしら間違えているのでしょうね。 ミスのほんの一例。添付図では、次式を入力しています。書式はどのセルも「0.000」を設定していて、同じです。 B1 =round(a1,2) C1 =round(a1,0) B6 =sum(b1:b5) C6 =sum(c1:c5) B7 =round(b6,0) C7 =round(c6,0) 十の位・一の位という 2 桁に丸めようとして勘違いで第 2 引数を「2」と書いてしまうと 、B 列のようになるので、整数にはなっていませんね。その合計(B6 セル)も整数とは限りません。C 列は全て、整数です。B7 は整数になりますが、それが C7 と一致する保証はありません。添付図でも、一致してませんね。B6 と C6 が等しくないのだから、当然のことですね。 ところがセルの書式を例えば「0」というものに設定すると、小数点以下に数字があっても、表示されません。小数点第 1 位で四捨五入した数が表示されます。これは表示(見かけ)だけの問題なので、見えていなくても、小数点以下が消えたわけではありません。つまり計算が合わない(ような気がする)という現象が発生します。 Excel だけでなく、算数のお話です。丸め誤差が発生する典型的な原因の一つは、丸める順序や回数にあるということがお分かりかと思います。 なお十の位・一の位の 2 桁というふうに、「何桁あるのか不定だが上から 2 桁」といった具合に丸めるなら、LOG 関数も必要になります。高校の算数で習う、対数ですね。 >……するにはどうしたらよいでしょうか?よろしくお願いします。 果たしてどうしたらいいのか、答えることが可能そうな質問の仕方を。無数の可能性があるのに、こちらもどうしたらいいのでしょうね…。
- Cupper-2
- ベストアンサー率29% (1342/4565)
微妙に違うと言うことですよね…。 思い当たる節はあるんですけど、質問者さんのケースに該当するかは書かれた質問文だけでは判断できませんので 内容を書いてみますので質問者さん自身で判断してください。 ■一つ目 普通に関数で =ROUND(12.5,0) なんてやった場合は、結果はどうやっても 13 になります。 ですが、これをVBAでやると 12 になるんです。 不思議に思うかもしれませんが、これは仕様なんです。 関数の四捨五入は単純計算ですが、VBAはIEEE754に基づいて計算するようになっています。 詳しい説明は省略しますが、VBAでの四捨五入は必ずしも5が切り上げられるわけではないんです。 (百分率の計算をする場合、この方法は項目の総合計が必ず100%ちょうどになります) ※ IEEE754でインターネット上を検索すると、 詳細な内容が示されたサイトを多数見つけることができますので、 そちらを参照してください。 ■二つ目 微小数誤差が原因で、微妙な誤差が出ているとも考えられますからね。 (微小数誤差で切り下げなければならない数値が切り上げられていたり、その逆とか) 12.5 と計算される数字が実は 12.49999999998 とか 12.50000000002 とか だったりすると、質問にあるような結果になることもあります。 そんなわけで、VBAを使った計算か確認してVBAを使っている場合は 実際の数値がどのように処理されているのか自身で検算するなどして判断してください。 VBAを使用していない場合は、素直に実際の数式と参照する値を示すことを自分も強くお勧めします。 でないと問題解決しないでしょう。
- tsubuyuki
- ベストアンサー率45% (699/1545)
> 合計が 1 違う場合が多々あります。 この具体例があると考えやすいです。 よければ、補足ください。
- keithin
- ベストアンサー率66% (5278/7941)
「具体的に」いったいどういう数字をどんな計算式で計算させてるのか判りませんし、125も126も説明のための説明を言葉で書いてるだけのご相談なので「具体的にここが計算間違いしてます」とお話しする事も出来ないご相談ですが。 いずれにしても単純にエクセルの数式が正しく使えてないのが原因か、あるいは >合計が 本来は 125 と ならなければならない そもそもそこから間違ってて、「本来」は126や124です。 ○基本の確認 =ある計算 という式をROUND関数で整数に丸めるには =ROUND(ある計算式,0) という数式にします。 寄せられたご相談にロクに返答も出来ないご相談者さんも大変多いですが、出来るだけあなたが失敗している実際のエクセルから「今実際にエクセルにはこの式が入ってます」と数式バーからしっかりコピーして、ご相談に掲示してみて下さい。 そうすると少なくとも計算式はちゃんとできているのか、やっぱり関数の使い方から間違ってるのが原因なのか、直ぐに的確なアドバイスが寄せられます。 ○勘違いの確認 少なくともROUND関数の計算が正しくセルに記入できていることが確認できたら、あとは「実際の数字」の問題になります。 「本来はやっぱり126だった」のパターンですね。 実際に計算に使っていて、「意図した数字と違う結果が現れた」時のその数字を詳しくご相談に書きこんで、どこが勘違いしているのか皆さんに見てもらってください。
お礼
お礼が遅くなってしまいスミマセン。 そうですね、私のやった書式(計算を)しっかりそのまま、載せた方が教えて頂く方にも分かりやすかったですね。 私のあいまいな記載の仕方で、悩ませてしまってスミマセンでした。
補足
お礼が遅くなり大変スミマセン。。 とても分かりやすい説明ありがとうございました。 それと、遅くなってしまいましたが、補足があり、今頃スミマセンが書き込みさせて頂きました。 お時間がありましたらよろしくお願いします。 ROUNDは整数になるけど、見えている部分だけということが分かりました。 これで、合計の数字がずれてきてしまうことが理解出来ました。 ただ、これを整数にしたいのですが、無理でしょうか? 計算式は 例 104,000÷100×8.56 =8,902.4 になり ROUND では四捨五入になるので、表示は 8,902 になります。 で、この数字のようなのが 5行分あるとして 整数だけを足すのであると 44,510 になり それをSUMでたしていくと 少数点まで計算してしますので、44,512 になってしまう訳です。 よろしくお願いします。m(__)m