- ベストアンサー
EXCELの関数式(INT,MOD)で教えて下さい
下図のような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」???
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 >例えばH2は、97810÷50=1956.2で、この剰余を小数点以下だと思い込んで、 >剰余を「2」って勘違いしてしまってる訳ですよね? こういうことになりますね。 >小数点まで計算して割り切ってしまったから、変な勘違いを起こしたのかな。。。 >MOD関数を使った計算を自分で計算するときは、 >小数点まで割らずに、余りを出せばよかったのですよね? 剰余を考えるときには、整数の範囲で考えてください。
その他の回答 (5)
- he-goshite-
- ベストアンサー率23% (189/802)
脇から失礼します。 >MOD関数を使った計算を自分で計算するときは、 小数点まで割らずに、余りを出せばよかったのですよね? →そのとおりです。 MOD(11,3)=2 ・・・11を3で割ったときの剰余 です。 整数の範囲で(割算の)「答え」と「余り」を出してください。
- imogasi
- ベストアンサー率27% (4737/17069)
質問の主旨と違ってごめんなさい。 私は金種計算を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列のデータ行の数から割り出す方法も在りますが 略。
- tsukasa-12r
- ベストアンサー率65% (358/549)
97810 = 1956 X 50 + 10 なので、MOD(97810,50) = 10 ですよね。
- arukamun
- ベストアンサー率35% (842/2394)
B2 =INT($A2/B$1) C2 =INT(MOD($A2,B$1)/C$1) C2をコピーして、D2からH2へペースト B2からH2をコピーして、下の行へペーストもできる様に絶対指定や相対指定を考えておきましたので、参考にしてください。
- colocolo62
- ベストアンサー率32% (1162/3624)
>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が絡んだ時の剰余の計算に勘違いがあったようですね。
お礼
丁寧なご回答ありがとうございます! あと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関数を使った計算を自分で計算するときは、 小数点まで割らずに、余りを出せばよかったのですよね? ↑情報処理系の資格を取るのに、自分で計算しないといけないので。
お礼
ご回答ありがとうございます。 大変参考になりました☆