[[20040514131700]] 『金種計算 1円単位まで狂いなく計算したい』(このみん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『金種計算 1円単位まで狂いなく計算したい』(このみん)

金種計算のシートを作っています。
以前の書き込み

[[20030318195534]] 『4800を1000が4 500が1 100が3に』(安田)

を参考に作りました。

それを元に出来たのですが、1円単位まで計算したときに狂いが出ます。

例えば、250,205円は

         10000    25
          5000     0
          1000     0
           500     0
           100     2
            50     0
            10     0
             5     0
             1     4

となってしまいます。
どうも100円の次が5円 or 1円まで小さくなったとき狂いが出るようです。

どうしたらよいのでしょうか。おしえてください。


 ん?
 私はうまく行きましたが...何がいけないのでしょうかね?
 10000	5000	1000	500	100	50	10	5	1
 25	0	0	0	2	0	0	1	0
 (よれっち)


 250205 は、直接入力した値でしょうか。それでしたら問題はないと思いますが。
 もし、数式の値でしたら、ROUND系の関数等で、整数処理をしておかないと、
 計算が合わない(見た目が合わない)場合が出てきますね。
 例えば、計算結果が、250204.6 だった時、セルの書式設定で、
 小数点以下は表示しない設定にしてあれば、250205 と表示されます。
 この状態でそのまま計算をすると、一の位の桁は、5と表示されていても、
 実際は4なので、計算結果に違いが出てきますね。

 =ROUND(計算式,0)
 等の処理が必要かと思います。
 (kkk)


(よれっちさん)、(kkk)さん 早速書き込んでいただいてありがとうございます。

kkkさんのあどばいすで、1円のセルに=ROUND(IF($B3="","",INT(($B3-SUMPRODUCT($C$1:J$1,$C3:J3))/K$1)),0)といれてみましたが、だめでした。
172,236円の人は間違いなく計算できるのに、170,604円の人は1円が4枚なのに3枚と計算されてしまうのです。

ということは、始めに書き込んだように、100円の次が1円の単位までなかったときに狂いが出るようなのです。

[Office 2003] というのは関係ないのですか? ・・・そんなの関係ないですよね・・・

よろしくおねがいします。
(このみん)


 よく読んでいただけるとお分かりになると思いますが、
 私が言いたいのは、1円の個数を出す計算式のところを変えるのではなく、
 250205が計算式の結果ではありませんか?ということです。
 250205が入っているセルの書式設定の表示形式を
 0.000000000000000
 とした時、250204.… と表示されませんか。
 もし、そう表示されるのでしたら、
 250205の入っているセルの計算式を整数処理する必要があるということです。
 (kkk)


たびたびの回答ありがとうございます。

250205の数値は「直接入力した数値」です。
計算式の結果ではありません。
大事なことを書き込むことを忘れていました。
すみません。
(このみん)


 >250205の数値は「直接入力した数値」です。

 ということでしたら、なぜなんでしょうね。
 1の位の式を、
 =IF($A2="","",MOD($A2,$I$1))
 としても、同じでしょうか?
 それでも、だめでしたら私には、わかりかねますので、他の方の意見をお待ちください。
 (kkk)


  衝突しました、kkkさん横から失礼します。
 >「直接入力した数値」です。
 常に手入力するんでっか?
 でしたら下のマクロを試して下さい。(計算結果を種別に分けるなら手直しが必要)

 1)[Alt]+[F11]でVBEを開く
 2)左のプロジェクト欄のSheet1をWクリック
 3)下のコードをコピペ
 4)エクセルに戻る

 A2から下方向へ10000〜1まで入力して下さい。
 A1に種別に分けたい金額を入力してみてくだはい。
 どうでっか?ご希望に添いましたか?
   ほな...(弥太郎)
 '---------------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tbl As Range
    Dim i As Integer
    Dim data As Long

    If Target.Count > 1 Then Exit Sub
    If Target.Address <> "$A$1" Then Exit Sub
    Application.EnableEvents = False
    Set tbl = Range(Target.Address).Offset(1).Resize(8)
    data = Target
    For i = 1 To 9
        If tbl.Cells(i, 1) <= data Then
            tbl.Cells(i, 2) = Int(data / tbl.Cells(i, 1))
            data = data - (tbl.Cells(i, 2) * tbl.Cells(i, 1))

        Else
            tbl.Cells(i, 2) = ""

        End If
    Next i
    Application.EnableEvents = True
 End Sub


 弥太郎親分の後なので、VBAは分が悪いでつな。
 同じ土俵で戦うのはやめときまひょ(笑)。

 これ、

 >参考に作りました。

 ってことは、自分で数式をアレンジしたってことですよね?
 例を見ると縦になってるし...
 実際の数式はどうなっているんでしょう?

 下のようにB2、B3を入力したら、B3の数式をB9までフィルします。
 必要ならB2からB9をC列〜へフィルします。
 下と同じものを別シートに作り直してみてください。
 それでも誤差がでますか?
 (ramrun)

   A		B	C
 1 		250205	1234567
 2 10000		25	123
 3 5000		0	0
 4 1000		0	4
 5 100		2	5
 6 50		0	1
 7 10		0	1
 8 5		1	1
 9 1		0	2

   A		B
 1 		250205
 2 10000		=IF(B$2="","",INT(B$2/$A3))
 3 5000		=IF(B$2="","",INT((B$2-SUMPRODUCT($A$3:$A3,B$3:B3))/$A4))
 4 1000		↓
 5 100		↓
 6 50		↓
 7 10		↓
 8 5		↓
 9 1		↓


 皆さんありがとうございます。(*^_^*)

 kkkさん ,=IF($A2="","",MOD($A2,$I$1)) の数式だと#VALUE!
 と出ます。ごめんなさい。
 
 >常に手入力するんでっか?

 弥太郎さん、従業員10人くらいの会社なので、手入力でも困りません。
 もしかしたら、他のシートをリンクさせるかもしれませんが、
 できなければ手入力にします。

 >>参考に作りました。
 >ってことは、自分で数式をアレンジしたってことですよね?

  例を見ると縦になってるし...
  実際の数式はどうなっているんでしょう?

 ramrunさん、いえいえ、実際には横型になっています。
 そっくりそのまま、

  [[20030318195534]] 『4800を1000が4 500が1 100が3に』(安田)

 このシートと計算式をコピーして作りました。
 縦型に書き込んだのは、実際に書き込んだのとプレビューで見たものが全然違うので,
 困って縦に書きました。
 紛らわしくてごめんなさい。
 実際のものは

 B       C        D         E       F         G        H        I        J      k
 差引支給	10,000	5,000	1,000	500	100	50	10	5	1
377,820	37	1	2	1	3	0	2	0	0
412,151	41	0	2	0	1	1	0	0	1
250,205	25	0	0	0	2	0	0	0	4
172,236	17	0	2	0	2	0	3	1	1
170,604	17	0	0	1	1	0	0	0	3

 C2=IF($B2="","",INT(B2/$C$1))
 D2=IF($B2="","",INT(($B2-SUMPRODUCT($C$1:C$1,$C2:C2))/D$1))
 E2=IF($B2="","",INT(($B2-SUMPRODUCT($C$1:D$1,$C2:D2))/E$1))
 F2= ↓

 k列まで計算式が入っています。

 前回も書き込んだように、172,236円の人は間違いなく計算できるのに、
 170604円 とか 250205円のひとは 1円少なく計算されてしまうのです。
 それで困ってしまって・・・

  弥太郎さん まだ、VBA 試していないのですが、
 やってみます。少し時間をください。

 というわけで、全部できないのではなく
 ある一部分だけ違ってしまうので、どうしてなのかな???
 と不思議で何を間違えているのだろうと思うのです。
 もし、単純なミスだったら・・・
 と少々怖い気がしているのですが、
 でもおしえてください!!
 よろしくお願いいたします。

 (このみん)


 >下と同じものを別シートに作り直してみてください。
 >それでも誤差がでますか?

 これ、やってもらえたのかな?
 こちらは、はっきりいって[入力間違い]していると思っているからです。
 ただ、このみんさんは逆に[入力間違いしていない]と思っているのですから
 話がすすみません。
 新しいシートに作り直させたほうが、白黒はっきりすると思ったんですよ。

 あと
 kkkさんの式 =IF($A2="","",MOD($A2,$I$1)) はこのみんさんが
 表を提示する前の式ですから、ご自分でセルの参照先を直さないと
 #VALUE! とでるのは当然です。
 直すと =IF($B2="","",MOD($B2,$K$1)) です。

 ちなみに
 G1の100のところに100.1
 H1の50のところに49.9
 I1の10のところに9.8
 のような数値が入力されていると、たしかにそのような答えになりました。
 これ表示形式が桁区切りだと、表面上は100の50の10と表示されます。

 (ramrun)


 おっと、しばらく席を空けとる間にもう千秋楽に近いようで。(笑)
 流石に老練ramrun山、ネコだましの技にはひっかかりまへんなぁ。

 このみんさん、新しいシートに作り直してみておくんなはれ。
 それで1発解決ですわ。(多分)
 希望的観測も入ってますけど、この勝負ネコだましを送り出してramrun山の勝ち〜い!
     ぐっふ、うぃー(弥太郎)


 >下と同じものを別シートに作り直してみてください。
 >それでも誤差がでますか?
 ごめんなさい。このアドバイスは読み落としていました。
 早速表を作り変えて見ます。

 ちなみに、kkkさんの式は参照先は直していました。
 (…初心者の私なので、あてにはなりませんが… わかる範囲でです。)
 これも、もう1度やり直してみます。

 何はともあれ、皆さんのアドバイスどおりに作り変えてみます!
 何度も書き込んでくださって、ありがとうございます。

 (このみん)


どう考えても、変ですね、残るは、金種の方がきっちり整数になってないんじゃないかな?

(天につば)


 皆様、お騒がせしました!
 やっとできました。
 
 ramrunさんのアドバイスとおり作り変えてみて、できたので
 (ちなみにコピペは参照セルがあっていなかったようです。生意気にごめんなさい。)
 今まで作っていた表に付け加えて、数式をフィルしたら なんと!できたのです。

 なんのこっちゃ(?_?)??? と?マークがいっぱいです。
 ちなみに、今までの行は切り取って違うシートへ貼り付けましたが、
 やっぱりそのまま1円少なく計算されてしまいます。
 
 とりあえずできたのでいいのですが、何でだろうと当初の疑問は解決しないまま(T_T)
 数式をコピペでワードに貼り付けて、比べてみたのですが、わかりませんでした。

 なんだか解決したのに、すっきりできな−−−−い!

 ちなみに(天につば)さんの
  >金種の方がきっちり整数になってないんじゃないかな?
 というのはどういう意味ですか?

 (このみん)


 >>金種の方がきっちり整数になってないんじゃないかな?
 >というのはどういう意味ですか?
 ramrunさんの書き込みでの
 >ちなみに
 >G1の100のところに100.1
 >H1の50のところに49.9
 >I1の10のところに9.8
 >のような数値が入力されていると、たしかにそのような答えになりました。
 >これ表示形式が桁区切りだと、表面上は100の50の10と表示されます。
のことだと思います。
(傍観者KAMIYA)


 私もいい加減ひつこくってごめんなさい。 

 (傍観者KAMIYA)さん、これって、セル書式設定の中の表示形式のことですか?
 これも、一応確認して、小数点以下は0にしてあります。

 C1 10000〜K1 1 まで全部最初は手入力ですし、
 書式設定で小数点以下は0に設定しているのですが・・・

 なんにしてもその行だけ出来なかったというのは、
 チェックか何かが入っているとは思うのですが・・・
 しかし、何をしているんですかね・・・
 
 でも本当にたくさんの方にアドバイスをいただけて,
 とてもとてもうれしかったです(*^_^*)
 とてもたくさんのことが勉強になりました。
 また書き込んだら、皆さん助けてくださいね。
 (このみん)


 (傍観者KAMIYA)さん かわりに答えていただいてありがとうございます。(このみん)さん書式設定の小数点以下0は、少数以下の値が無い、という意味にはなりません、少数以下の値を四捨五入表示するに過ぎません。でも金種に100、50,10,5,1と手入力してるんなら金種入力間違いというケース設定も無しですね。
(天につば)


  >書式設定の小数点以下0は、少数以下の値が無い、という意味にはなりません、少数以下の値を四捨五入表示するに過ぎません。
 へぇー、そうなんですか。

 世の中知らないことが多すぎますね。
 (このみん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.