プロが教える店舗&オフィスのセキュリティ対策術

下図のようなEXCELの表があります。
金種計算で、1行目は1万円、5千円、千円・・・10円と入っており、
A2は計算したい金額(97810)を入れています。
B2セルの式=INT($A2/B1)、C2セルの式=INT(MOD($A2,B1)/C1)で、C2セルの式はD2~H2に複写しています。

EXCELで得た計算結果(2行目)は正しいと思うのですが、
D2,F2,H2の計算結果と、自分で計算した結果があいません。
ここを詳しく教えて頂けないでしょうか。
宜しくお願い致します!
INT関数:整数部を返す MOD関数:剰余を返す

 |  A  |  B |  C |  D |  E |  F |  G |  H |
1|   |10000| 5000| 1000| 500| 100|  50 |   10|
2|97810|   9|   1|   2|    1|   3|   0|   1|

B2は、98710÷10000=9.7810→整数部を返すので「9」
C2は、97810÷10000=9.7810→剰余7810÷5000=1.562
→整数部を返すので「1」
D2は、97810÷5000=19.562→剰余562÷1000=0.562
→整数部を返すので「0」???
E2は、97810÷1000=97.810→剰余810÷500=1.62
→整数部を返すので「1」
F2は、97810÷500=195.62→剰余62÷100=0.62
→整数部を返すので「0」???
G2は、97810÷100=978.10→剰余10÷50=0.2
→整数部を返すので「0」
H2は、97810÷50=1956.2→剰余2÷10=0.2
→整数部を返すので「0」???

A 回答 (6件)

No.1です。



>例えばH2は、97810÷50=1956.2で、この剰余を小数点以下だと思い込んで、
>剰余を「2」って勘違いしてしまってる訳ですよね?

こういうことになりますね。

>小数点まで計算して割り切ってしまったから、変な勘違いを起こしたのかな。。。
>MOD関数を使った計算を自分で計算するときは、
>小数点まで割らずに、余りを出せばよかったのですよね?

剰余を考えるときには、整数の範囲で考えてください。
    • good
    • 0

脇から失礼します。



>MOD関数を使った計算を自分で計算するときは、
小数点まで割らずに、余りを出せばよかったのですよね?
→そのとおりです。
MOD(11,3)=2 ・・・11を3で割ったときの剰余 
です。
整数の範囲で(割算の)「答え」と「余り」を出してください。
    • good
    • 0

質問の主旨と違ってごめんなさい。


私は金種計算をVBAでやってます。参考までに載せておきます。
私も理屈では関数式で出来ると思います。しかし
下記で「中間金額」に当たる金額を表現する式が長くなって、いやだったのでVBAにしました。
他のワークエリア(結果として使わないが記憶させるセル)をつかったりすれば少し簡単になるかも。
質問ではどう解決されたのでしょうか。私の質問文の見方が悪いのか、見えてきません。
下記をVBEの標準モジュールに貼りつけて実行してみて下さい。たった13行で、あと2行は減らせますが。
Cells(i,j)は第i行、第j列のセルの値を表します。
B1:J1に金種金額を入れておきます。2000円除き9種。
Sub 金種計算1()
人数 = 3 '仮に3人
For i = 2 To 人数 + 1
枚数 = 0
中間金額 = Cells(i, 1)
For j = 2 To 10
中間金額 = 中間金額 - 金種 * 枚数
金種 = Cells(1, j)
枚数 = Int(中間金額 / 金種)
Cells(i, j) = 枚数
Next j
Next i
End Sub
人数をA列のデータ行の数から割り出す方法も在りますが
略。
    • good
    • 0

97810 = 1956 X 50 + 10


なので、MOD(97810,50) = 10 ですよね。
    • good
    • 0

B2 =INT($A2/B$1)


C2 =INT(MOD($A2,B$1)/C$1)
C2をコピーして、D2からH2へペースト

B2からH2をコピーして、下の行へペーストもできる様に絶対指定や相対指定を考えておきましたので、参考にしてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
大変参考になりました☆

お礼日時:2004/02/11 05:40

>D2は、97810÷5000=19.562→剰余562÷1000=0.562


>→整数部を返すので「0」???
97810÷5000=19.562
剰余は、5000×19=95000なので、2810
2810÷1000=2.81
→整数部を返すので「2」

>F2は、97810÷500=195.62→剰余62÷100=0.62
>→整数部を返すので「0」???
97810÷500=195.62
剰余は、500×195=97500なので、310
310÷100=3.1
→整数部を返すので「3」

>H2は、97810÷50=1956.2→剰余2÷10=0.2
>→整数部を返すので「0」???
97810÷50=1956.2
剰余は、50×1956=97800なので、10
10÷10=1
→整数部を返すので「1」

どうも、5が絡んだ時の剰余の計算に勘違いがあったようですね。
    • good
    • 0
この回答へのお礼

丁寧なご回答ありがとうございます!
あと1つだけ教えてくださいm(T-T)m
言われているとおり、とんでもない勘違いをしておりました(泣)
例えばE2は、97810÷1000=97.810→剰余810÷500=1.62
→整数部を返すので「1」ですが、
この【剰余】が、小数点以下の「810」と一致しているので、
5が絡んだ時の剰余も
例えばH2は、97810÷50=1956.2で、この剰余を小数点以下だと思い込んで、
剰余を「2」って勘違いしてしまってる訳ですよね?
↑人様に聞くのはおかしな話ですが、こんがらがってしまいまして。。。
97810÷50は小数点まで計算しなければ、商1956、余10になるので、
剰余は「10」となるんですよね。
小数点まで計算して割り切ってしまったから、変な勘違いを起こしたのかな。。。
MOD関数を使った計算を自分で計算するときは、
小数点まで割らずに、余りを出せばよかったのですよね?
↑情報処理系の資格を取るのに、自分で計算しないといけないので。

お礼日時:2004/02/11 05:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!