ExcelのROUND関数を用いて四捨五入をしたときに、四捨五入の仕方によっては計算が合わないように見えることがあります。しかし、Excelで計算したものを電卓で計算しなおして「計算が合わない」などと文句を言うのは愚かというべきです。計算が合わないのは、四捨五入の性質として発生する誤差(小学校の算数のレベル)であって、Excelに限って起こる現象ではありません。電卓で計算しなおして正しくなることは絶対にありません。計算が合わない事象の99.999999%は、Excelを使う人間のほうに原因があります。
逆に、「合計が合わないのが正しい」という場合もあります。また、端数処理の方法は1通りではなく、そのルールはExcelが決めることではありません。
そこで、今回は、四捨五入の性質を踏まえて、Excelで端数処理をするときの注意点について出題します。
目次
問題文のあとに簡単な操作方法を解説していますが、静止画では、わかりにくいと思いますので、最後に動画を載せています。ぜひご覧ください。
- 1.計算が合わないのはExcelのせいではない
- 2.構成比率の端数処理
- 3.按分の端数処理
- 4.端数調整のルールはExcelが決めることではない
- 5.端数処理は1通りではない
- 6.Excelの浮動小数点演算の誤差
- 7.動画版はこちら(無料)
1.計算が合わないのはExcelのせいではない
問題
ある飲食店ではキャンペーン価格として4つのメニューについて3%引きをしました。キャンペーン期間中の売上数量をもとに、売上合計金額を計算したところ、30395円となるはずなのに30380円となってしまいました。
B列の単価とD列の数量の入力、合計の数式はいずれも正しいです。
(1)金額について、キャンペーンを行う前に決めておくことは何か、述べなさい。
(2)C列の3%引きの計算にROUND関数は必要か、述べなさい。
(3)ROUND関数を用いる場合、桁数を1にした場合の注意点を述べなさい。
(4)C列の値引き金額を整数とする場合の注意点を述べなさい。
(5)チャーハン400円の3%引きは388円である。このように小数部分が無いことが明らかなメニューについては、ROUND関数を使わなくてもよいか。
解説
(1)端数処理のルールを決めること
3%引き、つまり97%を掛ける計算はあきらかに小数部分が発生します。お金の計算では端数をどのように処理をするかが極めて重要です。
1円未満であっても、掛け算をすると誤差が大きくなり、最終的に大きな差となります。とくに、掛け算や割り算、パーセンテージの計算では事前に端数が発生した場合の処理方法についてルールを考えておく必要があります。
端数が発生した場合、法律で禁止されていない限り、会社や個人で処理の仕方を決めることができます。
(2)四捨五入とは限らない
商品単位で端数処理をする場合、四捨五入、切り上げ、切り捨て等が考えられますが、どのように処理をするかはExcelが決めることではありません。四捨五入をすることに決定した場合に限り、ROUND関数が使えます。
四捨五入ではないのに勝手にROUNDを使ってはいけません。
(3)小数部分を隠してはいけない
ROUNDで四捨五入をする場合、通常は小数点以下を四捨五入するので、桁数は0です(参考:【Excel】ROUND関数の桁数は「小数点の位置」を0として考えると分かりやすい)。
ROUNDで桁数を0にすれば、金額が全て整数になり、合計金額が30395円となります。小数部分が適切に処理されていなかったことによって誤差が発生していたことが分かります。
桁数を1にします。
桁数を1にしても小数にはなりません。それは、表示形式がカンマ桁区切りになっているからです。
小数点以下表示桁数を増やします。
小数部分があるにもかかわらず、表示形式で表示させないのは間違いです。これはExcelのミスではなく表を作る人のミスです。桁数を1にして小数第1位まで求めた場合は、必ずその小数部分を表示します。
この場合、掛け算した結果も小数第1位までの端数が発生しますから、小数第1位まで表示しなければなりません。
その結果、合計金額も端数になります。
(4)端数処理の注意書きをしよう
ROUNDで桁数を0にします。
整数の表示にします。
ところで、1180円の97%は1144.6円であり、3%引きが1145円であるとする記載は間違いです。
このように計算上間違っている記載をそのまま放置してはいけません。
Excelの画面上では小数点以下を四捨五入したことが分かりますが、この表をプリントアウトした時には分からないので、「3%引き」という記述だけでは端数処理の内容が伝わりません。
ROUND関数を用いて端数処理をした場合は、その内容を記述します。
(5)四捨五入は全部に適用する
400円の97%は、388円であり小数部分はありません。したがって、ROUND関数があっても無くても同じです。
しかし、他のメニューについて四捨五入の処理をしているのに、1つだけROUNDを使わないのは間違いです。四捨五入をする必要が無くても必ずROUND関数を入れます。
また、次回のキャンペーンのときに再利用をすることができます。
2.構成比率の端数処理
問題
3つの商品A、B、Cの売上数量を入力し、合計を求めた。売上構成比率を求めなさい。ただし、パーセンテージの表示形式で小数第1位までとなるように、ROUND関数で四捨五入しなさい。
解説
売上構成比率は各商品の数量を合計で割ります。合計は絶対参照です(参考:構成比率は全体の何%?の前に、大きい数で割る感覚を鍛えなさい)。
小数になります。
パーセンテージにした時に小数第1位まで求めるということは、小数の段階では小数第3位まで求めるということです。
ROUND関数で四捨五入をします。桁数は3です。
このパーセンテージを合計すると100.1%となります。
ところで、3.4と3.4をたすと、6.8となり四捨五入をすると7になりますが、それそれを四捨五入をしてから足すと3+3=6になります。
足し算をしてから四捨五入をするのと、それぞれを四捨五入をしてから足すのでは答えが異なりますが、これは小数部分の影響によるものです。
小数第3位まで求めると、小数第4位以降の数字が無くなります。
0.1%未満の部分を合計すると0.1%を超えるため、100ではなく100.1%となります。
このように構成比率を四捨五入した結果を合計すると100にならないことがあります。
構成比率の合計が100にならないのは、四捨五入の性質上当たり前のことであって、Excelの計算は正しいです。
構成比率の合計が合わないのは世界共通の常識なので、合計が100になっていないことの注意書きをするだけでよいです。
もし、無理やり100%にする場合は割合の大きいもので調整します。0.1%を引きます。この場合も調整したことが明らかに分かるように注意書きをしなければなりません。
3.按分の端数処理
問題
3つの部署X、Y、Zの人数に応じて、合計金額が100万円になるように按分しなさい。また、ROUND関数を用いて整数値にしなさい。
解説
全体の数量が分かっていて、ある一定の割合で按分をするには、全体の数量に構成比率を掛けます(参考:【Excel】按分の計算方法と按分比率を補正する計算式の練習問題)。
まず、構成比率を求めます。小数になります。
これに100万円を掛けます。絶対参照です。
構成比率が小数なので、金額も小数です。
ROUND関数で四捨五入をします。桁数は0です。
この金額を合計すると1円足りません。
構成比率の合計に誤差が出るということは、それに全体の数量を掛けた按分の数量も合計が出るのは当然のことです。
このように、按分した数量の合計が元の数量と一致しないのは、四捨五入の性質上当たり前のことであって、Excelの計算は正しいです。
この1円をどうするかはExcelには決められないので、自分で決める必要があります。
割合の多い部署で調整するのであれば1円を足します。ただし、調整した理由を記述しておく必要があります。
4.端数調整のルールはExcelが決めることではない
問題
商品代金2,050円を7%値引きして請求金額を求めようとしている。値引金額を四捨五入するのと、請求金額を四捨五入するのは同じと言えるか。
解説
値引金額は商品代金の7%です。
小数になるのでROUNDで四捨五入をします。桁数は0です。
144円となります。引き算をすると1906円となります。
今度はさきに請求金額を求めます。7%の値引きをするということは残りは93%です。
小数になるのでROUNDで四捨五入をします。桁数は0です。
1907円となります。引き算をすると値引金額は143円となります。
商品代金からみて値引金額は7%、請求金額は93%です。
値引き額を144円にすると全体の7.02%にあたるため四捨五入をすると7%になります。しかし、143円にしても6.97%なので四捨五入をすると7%になってしまいます。
このようにパーセンテージの計算で四捨五入をすると答えが1つに決まらないことがあります。
これは四捨五入の性質上当然発生することであり、Excelの計算は正しいです。
7%の四捨五入は144円、93%の四捨五入は1907円なので、合計2051円となり計算が合いません。
両方四捨五入をするとさらに誤差は大きくなります。一方を四捨五入した時はもう一方を四捨五入してはいけません。
いずれを四捨五入にするかについてはExcelが決めることではないので、事前にルールを決めておく必要があります。
5.端数処理は1通りではない
問題
(1)各商品の単価をそれぞれの割引率で割引して、合計金額を求めなさい。また、カンマ桁区切りにしなさい。
(2)計算が合わないので四捨五入をすることにした。ROUND関数を用いて修正しなさい。
解説
割引率で割引をするときは、1から引いた比率を掛けます。さらに、数量を掛けます。2763.5円と3537.6円になります。
合計すると6300.1円となります。カンマ桁区切りにします。2763円と3538円を足すと6301円のはずですが、6300円になります。
そこで、合計を四捨五入します。桁数を0にします。
答えは変わりません。
合計金額を四捨五入をしても計算が合わないことがあります。この場合は、注意書きをするなどの工夫が必要となります。
別解その1
次に、足し算をする前の金額を四捨五入します。
桁数を0にします。これで6301円になります。
この場合も四捨五入によって、小数を整数にしているので注意書きが必要です。
小数を足した後の合計を四捨五入するのと、四捨五入をしてから合計をするのは異なります。
別解その2
単価に1-割引率を掛けます。単価が小数なのでこのような誤差が発生するのです。
そこで、この単価を四捨五入します。桁数を0にします。
割引後の単価に数量を掛けます。
単価が整数なので四捨五入をしなくても整数になります。その合計も整数になります。
もともと6301円ですから、合計金額が変わっています。
単価の小数部分を無くしてから、数量を掛けているので、その分誤差が大きくなります。これも正しい計算です。
いっぱんに、商品1個単位で端数が発生する場合に、その端数を調整する方法には3通りあります。商品1個単位で調整する方法と、商品の種類ごとまたは分類ごとで調整する方法と、全体の合計で調整する方法です。
いずれの方法で調整してもかまいませんが、調整方法はExcelが決めることではないので、事前にルールを決めておく必要があります。
6.Excelの浮動小数点演算の誤差
102.03-100.18=184.9999999999999のように浮動小数点演算を原因とする微小な誤差が発生することがあります。これはExcelに限らずコンピュータ全般で発生する誤差です。その場合も「数式の検証」を用いて原因を見つけることは可能です。
解説は以上です。
7.動画版はこちら(無料)
この記事は、わえなび実力養成講座「ファンダメンタルExcel」Program 12-12、12-13、12-14 のYoutube動画を書き起こして、加筆修正したものです。
- ファンダメンタルExcel 12-12 計算が合わないのはExcelのせいではない【わえなび】(ファンダメンタルExcel Program12 ROUND関数を用いた端数処理)
- ファンダメンタルExcel 12-13 構成比率と按分の端数処理【わえなび】(ファンダメンタルExcel Program12 ROUND関数を用いた端数処理)
- ファンダメンタルExcel 12-14 端数調整のルールはExcelが決めることではない【わえなび】(ファンダメンタルExcel Program12 ROUND関数を用いた端数処理)