• ベストアンサー

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」???

  • y0-k0
  • お礼率72% (270/371)

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

  • ベストアンサー
  • colocolo62
  • ベストアンサー率32% (1162/3624)
回答No.6

No.1です。 >例えばH2は、97810÷50=1956.2で、この剰余を小数点以下だと思い込んで、 >剰余を「2」って勘違いしてしまってる訳ですよね? こういうことになりますね。 >小数点まで計算して割り切ってしまったから、変な勘違いを起こしたのかな。。。 >MOD関数を使った計算を自分で計算するときは、 >小数点まで割らずに、余りを出せばよかったのですよね? 剰余を考えるときには、整数の範囲で考えてください。

その他の回答 (5)

回答No.5

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

質問の主旨と違ってごめんなさい。 私は金種計算を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列のデータ行の数から割り出す方法も在りますが 略。

回答No.3

97810 = 1956 X 50 + 10 なので、MOD(97810,50) = 10 ですよね。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

B2 =INT($A2/B$1) C2 =INT(MOD($A2,B$1)/C$1) C2をコピーして、D2からH2へペースト B2からH2をコピーして、下の行へペーストもできる様に絶対指定や相対指定を考えておきましたので、参考にしてください。

y0-k0
質問者

お礼

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

  • colocolo62
  • ベストアンサー率32% (1162/3624)
回答No.1

>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が絡んだ時の剰余の計算に勘違いがあったようですね。

y0-k0
質問者

お礼

丁寧なご回答ありがとうございます! あと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関数を使った計算を自分で計算するときは、 小数点まで割らずに、余りを出せばよかったのですよね? ↑情報処理系の資格を取るのに、自分で計算しないといけないので。

関連するQ&A

  • 《Excel2007》INT関数について

    あるセルに入っている数字(表示形式は通貨)から1桁ずつ 別のセルに移したく雛型を作っています。 《例》A1=12.34を、C1=1 D1=2 E1=3 F1=4、と言う風に入れたく、 F1=INT(MOD(SIGN($A$1)*$A$1/0.01,10)) E1=INT(MOD(SIGN($A$1)*$A$1/0.1,10)) D1=INT(MOD(SIGN($A$1)*$A$1/1,10)) C1=INT(MOD(SIGN($A$1)*$A$1/10,10)) B1=INT(MOD(SIGN($A$1)*$A$1/100,10)) ↑B1はこの例では必要ないですが、A1の数字が増えたときのため。 と、入れているのですが、 (1)ない位に0が入ってしまうのを回避できますか? (この場合、10の位までしかないのに、100の位=B1に0が返される) (2)一番右の桁の数字がたまにずれるのですが理由が分かりません… 勉強不足ですみません。よろしくお願い致します。

  • Excelの関数式について(IFERROR関数)

    Excelの関数式で、基本的な算数がわからず、質問いたしました。 具体的には、 A1セルとB2セルに整数を入力し、C1セルに 「=IF(ISERROR(ROUND(A1/B1/(1.11831)*1000,2)),"",ROUND(A1/B1/(1.11831)*1000,2))」 という式が入っています。 さらに、D1セルには「=A1*B1」という式が入っています。 この時、D1セル÷A1セル(「=D1/A1」)を計算すると、ほぼ894.2に近しい値となります。 A1セルの値を固定し、B2セルの値をいくつにしても、D1セル÷A1セルの結果が、894.2に近似するのは、なぜでしょうか? お恥ずかしい質問ですが、お知恵を授けてください。

  • C言語プログラム能力検定の問題でわからないところがあります

    今度C言語プログラム能力検定を受けるのですが、過去問の回答ではわからず質問させてもらってます(以下ソース) ------------------------------------------ #include<stdio.h> int mod(int a, int b); int d, f = 10; main() { int a,b,c; enum cl {g,h} a=12; b=5; c=mod(a,b); a++; ++b; c=mod(a,b); printf("c=%d\n",c); ←(1) } int mod(int b, int a) { int c; c=b/a; c=b-c*a; return(c); } -------------------------------------------------- 問題は(1)はどのように出力されるでしょう?といったもので、 答え(出力結果)は「1」でした。回答の説明によると 「変数cはmain関数内で宣言され、mod関数の戻り値が格納される。 mod関数の戻り値は二つの引数の剰余であり、ここでは2回目のmod関数 の戻り値が表示される。2回目の仮引数は、aが6で、bが13で戻り値は1になる」 ということでしたが>mod関数の戻り値は二つの引数の剰余であり… というのがよくわかりません…剰余算というのは「%」のことですよね? であれば「c= a % b」といった記述がでてくれば13÷6=2…1で「1」となり、理解できるのですが、それらしき記述がないので(--;) どなたか教えていただけないでしょうか? よろしくおねがいします。

  • 条件付書式?色をつけたり空白にしたい。

    B7   C7   D7   E7   F7   G7   H7 各セルの表示は 7:31 17:00 465 1020 7:45 17:00  2:00 各セルの数式は B7,C7,H7はセルの書式設定で##":"##(このセルに数字を入れるだけにしてます) D7=INT(B7/100)*60+CEILING(MOD(B7,100),15) E7=INT(C7/100)*60+FLOOR(MOD(C7,100),15) F7=INT(D7/60)*100+MOD(D7,60) G7=INT(E7/60)*100+MOD(E7,60)になっています。 例えば、 B7セルに6:25としたら7:00より前なのF7セルのフォントとパターンの色を変えて  C7セルに18:52としたら18:00より後なのでG7セルのフォントとパターンの色を変える、 そしてC7セルが、空白の時はB7,F7,G7,H7セルを空白にしたいのですが、 よく分かりません、教えて頂けますか?

  • Excelで集計に関する関数の質問です

    添付した図を基に質問します。4行目をウィンドウ枠固定して表示してあります。 行列番号を見てもらえたら分かると思いますが、要所でセルを結合してあります。 セルB6に=IF(B5="","",(IF(B5>1999,0,IF(E5<501,0,IF(AND(B5>499,E5<2001),(TIME(INT(E5/100),MOD(E5,100),0)-TIME(INT(B5/100),MOD(B5,100),0)),IF(B5<500,TIME(INT(E5/100),MOD(E5,100),0)-(TIME(INT(500/100),MOD(500,100),0)),IF(E5>2000,TIME(INT(2000/100),MOD(2000,100),0)-TIME(INT(B5/100),MOD(B5,100),0),0))))))*24) D6に=IF(B5="","",IF(AND(B5<500,E5>500),(TIME(INT(500/100),MOD(500,100),0)-TIME(INT(B5/100),MOD(B5,100),0)),IF(AND(B5<2000,E5>2000),(TIME(INT(E5/100),MOD(E5,100),0)-TIME(INT(2000/100),MOD(2000,100),0)),IF(AND(B5>499,E5<2001),0,(TIME(INT(E5/100),MOD(E5,100),0)-TIME(INT(B5/100),MOD(B5,100),0)))))*24) これは、項目A列5行目を参照しています。以下オートフィルします。 例えば7時から10時10分の差を求める場合、B6セルに700、D6セルに1010と1分単位で入力し、表示形式は0.0" H"です。 項目C,Dも同様で、項目C内E列には1時間30分の場合1.5と入力し30分単位です。表示形式は同様。 A列の日付欄には、1月1日の場合1/1と記入します。表示形式は日付の月/日です。 上記内容で添付図の上の表(A3:S30)項目B~D列のデータを下の表(A32:S39)で集計しようと思います。 1、F35~F38に月ごとの時間の計を表示させる関数 2、J35~J38には、月ごとの時間*単価を項目別に計算した値の計を表示させる関数 3、P35~P38にも上記同様の計を表示させる関数 以上、1,2,3に入力する関数が知りたいので、宜しくお願いします。 なお不明な点がありましたら随時補足していこうと思います。

  • a mod b = x、c mod d = x

    a mod b = x c mod d = x (a,b,c,dは正の整数) という式が与えられ aとbとdの数値が決定している場合に cの値を求める事は可能でしょうか? ただしこのとき 計算途中にxの値を使わずcの値を求めたいのです。(瞬間的にでもメモリ(レジスタ含む)にその数値を書きたくない為) 例えば 49999 % 800 = 399 c mod 1560 = 399 この場合cは50319や51879等あると思いますが49999に近い値が望ましいです。 不可能な場合でも理由をご回答頂ければ幸いです。 宜しくお願いいたします。

  • INT関数で

    初歩的な質問で申し訳ないのですが、 A1セル:1.5 A2セル:2.3 A3セル:3.6 とあったと仮定しまして、 A4セルに合計を出すのですが、普通にSUMで合計すると7.4となります。 今回の条件として整数にしなくてはなりません。 合計した値をINTで整数だけ抜くと7という解になりますが、 INTで抜き出した後合計すると6という解になります。 「INTで抜き出した整数の合計を求める」関数をA4セルにいれて処理したのですが、どうしたらいいのでしょうか。 宜しくお願い致します。

  • INT使用時のSUMの設定の仕方

    面積を出す式で 底辺(列A)×高さ(列B)の答えを 小数点以上を列C、以下をD列というように2つのセルに分割して 表示したいのですが、するために、以下のような計算式を入力しました。 整数部分 (C1) =INT(A1*B1) 小数部分 (D1) =A1*B1-INT(A1*B1) 今度はこのようにして計算した複数の面積の合計を表示したいのですが、 どんな方法があるでしょうか? お知恵を貸してください。 よろしくお願いいたします。

  • エクセルの関数を教えてください。

    セルHにIFとANDを使って下記内容の関数式を入力したいです。 セルAからセルF内すべてに数値が入っていたらセルFを返す、 セルFが空欄ならばセルEの数値を返す、 セルEも空欄ならばDの値を、 Dも空欄ならばCの値を、Cも空欄ならばBの数値を、 Bも空欄ならばAの数値を返し、 Aも空欄(つまりAからF内に数値なし)ならばスペースを返す。 わかる方、教えてください。 よろしくお願いします。

  • エクセルの演算式で困っています。

    エクセルの演算式で困っています。 セルC1,D1,E1,F1、G1の5個のセルに人数をそれぞれ入力します、そして、5個のセルの総計をH1のセルに入力します(G1の数値は、必然的にH1-(C1+D1+E1+F1) になると思います。 A3、A4,A5 と3個のセルに金額を入力します。 で、C3のセルに、(A3×C1÷H1)+(A3×1×5) の演算結果が出るようにしたいのです。つまり、C3のセルにこの演算結果が表示されるような演算を仕込みたいのです。 以下、同様に、C4のセルに、、(A4×C1÷H1)+(A4×1×5)の演算結果を表示したいのです。 また、D3のセルには、(A3×D1÷H1)+(A3×1×5) の演算結果が出るようにしたいのです。 以下、同様に、E3のセルには、、(A3×E1÷H1)+(A3×1×5) の演算結果が出るようにしたいのです。 こうなると、最後のG3のセルには、H1-(C1+D1+E1+F1) を演算式の一部に書かないといけなくなります。 で、私には手におえなくなったのです。 すいません、もし、これをご理解頂けたら、アドバイスを御願いできないでしょうか?

専門家に質問してみよう