• ベストアンサー

エクセル2000で

いつもお世話になります。ROUND関数で出した数字を合計すると1円の差異が出るのですが、何か回避する方法はあるのでしょうか。どなたかよろしくお願いいたします。

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

  • ベストアンサー
  • camel777
  • ベストアンサー率37% (12/32)
回答No.2

こんにちは 四捨五入する桁と表示する桁数が合ってないんじゃないいんでしょうか? A列に数値B列に計算式が入るとして、 B1に入る計算式がROUND(A1,1)になっていて、「セルの書式設定」で小数点以下の桁数が0になっていると以下のような結果が出ます。 A  B 1 0.4 0 2 0.4 0 3 0.4 0 4 合計 1 お金の計算なので、四捨五入する桁数を小数点第一位にするために、B1に入る数式を ROUND(A1,0)に変えると A  B 1 0.4 0 2 0.4 0 3 0.4 0 4 合計 0 となり、合計が合います。 ちなみに、ROUNDUPは切り上げたいとき、ROUNDDOWNは切り下げたいときにつかいます。

honatu
質問者

お礼

camel777さん、ありがとうございました。おっしゃるとおりB1に入る計算式がROUND(A1,1)になっていて、「セルの書式設定」で小数点以下の桁数が0になっていました。本当にありがとうございました。

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

かなり想像して書いています。違っていれば読み飛ばして下さい。 起きていることは、   A  B 1 割合 按分 2 10%  10 ←=ROUND($A$6*A2,0) 3 20%  20 ←=ROUND($A$6*A3,0) 4 40%  40 ←=ROUND($A$6*A4,0) 5 30%  30 ←=ROUND($A$6*A5,0) 6 99  100 ←=SUM(B2:B5) のような計算ではないでしょうか。 『99』をA2~A5の割合で4つに按分していますが、結果が『99』になりません。 このような事例は仕事では日常茶飯事です。対応方法としては端数を処理するルールを決めています。 一番多い方法が、ウエイトの一番大きいところで調整する方法です。 上の例でいえば、40%の個所の数値を40→39にします。 これを算式で行うには、   A  B  C 1 割合 按分 按分2 2 10%  10 =ROUND($A$6*A2,0)+IF(RANK(A2,$A$2:$A$5,0)=1,$A$6-$B$6,0) 3 20%  20 =ROUND($A$6*A3,0)+IF(RANK(A3,$A$2:$A$5,0)=1,$A$6-$B$6,0) 4 40%  40  ↓ 5 30%  30  ↓ 6 99  100 =SUM(C2:C5) のようにして、B列を非表示にしたりします。 しかし、ウエイトの一番大きいセルが複数あったりするとワークシート関数だけではかなり複雑になってしまいます。かつ、計算の差異が1円でない場合もあります。実際は、ユーザー定義関数を作って計算しています。按分対象数が少なく、1円の差異なら、下の計算で可能でしょう。上の例なら、B2に  =Anbun(A2,$A$6,$A$2:$A$5) と入力します。  < =Anbun(計算するセルのウエイト,合計値,ウエイトの一覧) > 計算してみて、合計が合わなければ、ウエイトの一番大きいセルの一番上のセルで調整します。 ユーザー定義関数なら処理基準を変える場合も比較的簡単に対応できます。データの性質で色々処理方法はあると思います。処理の参考にして下さい。 標準モジュールに貼り付けます。 Public Function Anbun(wgt As Range, TTL As Range, Area As Range)   Dim calcTotal As Double '計算したままの結果   Dim rg As Range 'セル   Dim fstRgAdr As String '最初に見つかったRANK=1のセル番地   With Application     '無条件に計算して合計を計算する     For Each rg In Area       calcTotal = calcTotal + .Round(TTL.Value * rg.Value, 0)       'RANK=1の一番上のセル       If fstRgAdr = "" And .Rank(wgt, Area, 0) = 1 Then         fstRgAdr = rg.Address       End If     Next     '按分計算     Anbun = .Round(TTL.Value * wgt.Value, 0)     If wgt.Address = fstRgAdr Then       '割合の一番多いセルで調節する(この調節方法は例)       Anbun = Anbun - (calcTotal - TTL.Value)     End If   End With End Function

honatu
質問者

お礼

説明の仕方が悪くて申し訳ありませんでした。camel777さんのご回答で解決いたしました。ありがとうございました。

回答No.1

ROUNDUPか、ROUNDDOWNを使えば大丈夫です。

honatu
質問者

お礼

早速のご回答ありがとうございました。camel777さんのご回答で解決しました。今後ともよろしくお願いいたします。

関連するQ&A

専門家に質問してみよう