• ベストアンサー

round関数について

試しにエクセルで次の計算をしてみてください。 -16.76 7.9 -11.45 -8.88 -1 4.26 33.78 以上を全部足します。つまり「=sum(a1:a7)」です。当然「7.85」になります。 次に四捨五入します。round関数で小数点第2位を四捨五入して、第1位まで表示させます。つまり、「=round(sum(a1:a7),1)」ということです。すると「7.8」を返しました。 ん?「7.9」なのでは?と思い、次にこんな計算をしてみました。 A・・・=round(sum(a1:a7),2) B・・・=round(A,1) つまり、Aでいったん小数点第3位を四捨五入させた上で、その値を今度はBで小数点第2位を四捨五入させ、最終的に小数点第1位まで表示させたわけです。すると、ちゃんと「7.9」を返しました。 なんでこんな風になるのでしょうか?どうして一発で「7.9」にならないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんばんは。 四捨五入のことを、英語で、'ROUND'(名詞:円形) といいます。それを、そのまま日本語に直すと、「丸める」というのです。似たような用語に、「返す」という言葉がありますが、'RETURN' (動詞:戻る)です。これは、数学の用語だそうです。それと、もともと、VBAでは、Office 2000 までは、'Round'関数がなかったはずですし、四捨五入としては 'Round' は使いませんから。 それと、#6さんの紹介したサイトに、混乱させることを言うと、私の知っている範囲では、Excelのバージョンによって補正処置が違っていたはずです。Office 2007 では、違った印象を持ちました。もともと、補正技術は、各社各様ですが、MSで言う 「IEEE 754」とかいう話は、私には、時代遅れの言い訳に過ぎないと思うのです。少なくとも、昔の某社の技術を借りていた頃のMicrosoft 社製の表計算は、今ほど、誤差は出ませんでした。 それで、ワークシートの場合は、小数点を含むマイナスの演算に、「丸め誤差」が発生します。VBAは、例えば0.01~0.99 までの、四則演算のみならず、数値そのものの約半分に誤差が発生しますので、それを承知でプログラムを書かなくてはなりません。VBAのそれが生の状態とすると、ワークシート側は、補正されていることが分かります。 今回の数値は、小数点第2位までありますから、 =SUMPRODUCT(A1:A7*100)/100 と100倍して、100を割ります。この処理方法を「整数変換法」といいます。 それで、もしも、四捨五入するのでしたら、 =ROUND(SUMPRODUCT(A1:A7*100)/100,1) とすればよいです。もしも、こうした一括でする方法が思いつかないなら、補助列を使って、100倍して行うと良いです。 別の方法で、 =ROUND(FIXED(SUM(A1:A7),2,FALSE),1) この処理方法を、「小数点固定法」と呼んでいます。 この二つは、プログラミングで使われる手法です。 ただ、私は、こういう方法を好んで書いているわけではなく、この程度のレベルは、ユーザー任せにしないで、ソフトメーカー側が補正処理を施すべきではないかと思います。このほかにも、別の種類の丸め誤差が存在しますから、時間計算など、表示と内部の数値が違うものは、必ず検算しなくてはなりません。

gootaroh
質問者

お礼

ご回答ありがとうございました。どうやら「銀行型丸め」ではなく、二進法からくる構造的な「誤差」のようですね。解消法はご回答のように、補助的な作業スペースを設けることにより、多段階に計算させた方がよさそうだと思いました。長い数式で一発計算させるよりも、この方が計算過程のチェックもできますし、効果的だと思いました。ありがとうございました。

その他の回答 (7)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.8

#6の御紹介もそうですが、Googleで「エクセル 丸め 誤差」で照会してみてください。沢山記事が出る中で、良さそうなものを拾い読みして、勉強してください。 http://www.kentei.ne.jp/quali/column/knowhow/030415.html ほか多数出る。 ここの質問コーナーに説明できる範囲を超えた問題です。コンピュターの数の表現など、基礎的な勉強がされて無いと、やたらにエラーを見つけたという、報告になりがちです。 エクセルは全世界の頭脳優秀者も使って色々な使い方もされて、見張られているはずです。既に大概のことはMSに報告され、掌握してるはずです。それでも諸条件をトレードオフして、現状のまま(カタチ)で行っていると思います。

  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.6

あっしには良く理解できませんが こんなサイト見つけました 「※ 本項は上級者向けの資料。初心者は読むと混乱する可能性が高いのでオススメしない」と書いてありましたので念のため https://eip.econ.kanagawa-u.ac.jp/eip/excel-calc-error.html

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.5

その、=sum(a1:a7) が入っているセルの書式設定で 表示形式を「数値」 桁数を20桁くらいにしてみてください 7.84999999999999000000 と、表示されると思います これは、割と有名な話だと思うんですが エクセル内部では2進数で計算しているのでこのような誤差がでる様です 特にマイナスが付く計算では出やすいようです

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

#2です。 すみません、vbaのround 関数と勘違いしてしまいました。 #2は取り消します。

回答No.3

ROUNDってROUND、ROUNDUP、ROUNDDOWNの3種類があります。 UPは切上げ、DOWNは切捨てROUNDは四捨五入って書いてあるぞ!!! BUGかな?

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

excelのround関数は単純な四捨五ではありません。 http://okwave.jp/qa4215450.html

回答No.1

ROUND ではなく ROUNDUPにすればOKです。

関連するQ&A

  • ACCESSのRound関数について

    お世話になっております。 ACCESSのクエリでRound関数を使い、小数点以下を四捨五入した値を表示させようと思いましたが、なぜか 1876.5→1876 と表示されてしまいます。 同じ列のほかのセルはちゃんと四捨五入した値が表示され、5389.5 も 5390 のように表示されます。 どなたか思い当たる方原因を教えていただけますでしょうか。 よろしくお願いします。

  • エクセルのROUND関数で・・

    エクセルの関数を使って計算してるんですが、答えが合わないんです。 =ROUND($B31*$D31,2) $B31 には 3.900 $D31 には 3.55 二つをかけた値「13.845」の、少数第2位を四捨五入して返した値が、13.9 と出るんです。 少数第2位の 4 を四捨五入したら 13.8 が返されるはずですよね? 今日朝から一日悩んでます(+_+) パソコンには詳しくないので解り易くどなたか教えてください<m(__)m>

  • 関数 ROUNDとセルの書式設定

    こんにちは。 EXCEL初心者です。 関数について、ふと思ったことがありましたので質問させてください。 ROUNDとか*UPや*DOWNという関数がありますよね? 調べてみるとこの関数の行う処理は、「値を指定した位で四捨五入する関数です。消費税の計算など小数点以下の位を四捨五入する時などに使えます」とのことですが、この処理は、「セルの書式設定」→「数値」で出来る設定と同じような気がするのですが、なにか違うのでしょうか? よろしければ「こんな使い方もあるよ」的なことを紹介していただけるとうれしいです。

  • エクセル関数を教えて下さい。

    ROUND関数で除算して、小数点以下を四捨五入させたセル(ROUND(A1/1.05、1))を合計する際、ROUND関数で求めた画面上の整数の合計をさせる関数を教えて下さい。SUM関数を使用すると、除算した小数点以下の数字にて集計されます。

  • ROUND関数で、四捨五入ができない。

    ROUND関数で、四捨五入ができない。 カラムの値が'8.5'の場合'9'になるはずなのですが、'8'となってしまいます。 解決方法ありますでしょうか? '4.5''6.5'の場合でも、四捨五入ができないです。 SELECT カラムA,ROUND(カラムA) FROM テーブル ----------------------------------------  カラムA |  ROUND(カラムA) ----------------------------------------   5.5   |   6          ←四捨五入ができている ----------------------------------------   8.5   |   8          ←四捨五入ができない ----------------------------------------   4.5   |   4          ←四捨五入ができない ---------------------------------------- XAMPP 1.7.3の MySQL 5.1.41を使用しています。

    • ベストアンサー
    • MySQL
  • エクセルのROUND関数について

    小数点以下を四捨五入して整数にするには,例えば ROUND(1.52,1) なら,2になると思うのですが, ROUND(1.52,01) としても2となります. 1としても0.1としても結果は必ず等しくなるのでしょうか? よろしくお願いします.

  • 割合を表すデータ

    1日に何冊本を読んだか アンケート回答者数 合計 29人 A    B   C   冊数   人数   人数/29人 1 1冊    2人   0.068965517    2 2冊    5人   0.172413793   3 3冊    4人   0.137931034    4 4冊    6人   0.206896552    5 5冊    2人   0.068965517     6 その他   10人   0.344827586 このデータをROUND関数を使って小数点第2位で四捨五入した場合と小数点第3位で四捨五入した場合では下記の様な結果になります。 ROUND(C1,2)         ROUND(C1,3)   小数点第2位で四捨五入   小数点第3位で四捨五入 1    7%            7% 2    17%            17% 3    14%            14% 4    21%            21% 5    7%            7% 6    34%            35%     100%            100% 6番目は34%と35%と異なりますが、SUM関数を使って1~6を合計すると100%と計算されます。 これはC1~C6を合計した結果が "1" となる為、このようにどちらも100%と計算されるのだと思いますが、小数点第3位で四捨五入した場合の方は電卓で計算すると101%となってしまいます。 小数点第3位で四捨五入した方が正確なような気がしますが、データの見た目的には小数点第2位で四捨五入の方(合計で100%)を使用した方が良いのでしょうか? 合計で100%(電卓使用)にならないデータはこういった割合を表すデータにはおかしいのでしょうか?

  • エクセルの関数。お願いします!

    任意の桁数で四捨五入するROUND関数についてお願いします。 A1「5678.492」の数値。 (ア)小数点以下を四捨五入しなさい。 (イ)1の位を四捨五入しなさい。 =ROUND(A1,○)の○には何が入るんでしょうか?

  • EXCEL 関数

    例えば =(E3-AVERAGE($E$3:$E$13))*10/STDEVP(E$3:E$13)+50 この数式の入った値は52.00187764 なのですが、これを四捨五入するROUND関数を使うとすればどのような数式になるか教えて欲しいのですが、先頭にROUNDをつけると()カッコの付け方等いまいちよくわかりません。 小数点第2位で四捨五入です。

  • エクセルのラウンドについて

    エクセルでラウンドを使用して四捨五入をしようと思いますが、小数点以下を四捨五入ではなく、 一の位を四捨五入したいのですがどの様にすれば出来るでしょうか? 見積書の単価に3%上乗せした単価に自動計算させたいのです。(量が半端なく多いので・・・(^_^;)) どなたか教えて下さい。 宜しく御願い致します。

専門家に質問してみよう