• ベストアンサー

《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)一番右の桁の数字がたまにずれるのですが理由が分かりません… 勉強不足ですみません。よろしくお願い致します。

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

>(1)ない位に0が入ってしまうのを回避できますか? (この場合、10の位までしかないのに、100の位=B1に0が返される) 当然計算結果が0ですから0になります。100の位は無いのではなく0が省略さていると考えます。空白にしたければセルの書式設定を使うか式の中でIFで100未満のとき空白にする。 =IF($A$1<100,"",INT(MOD(SIGN($A$1)*$A$1/100,10))) (2)一番右の桁の数字がたまにずれるのですが理由が分かりません… 実際はA1には何かの計算結果が入るのではありませんか 例えば12.148と入るのをA1の書式設定で小数点以下2桁としていると表示は12.15 となります。しかしあなたの式では4が表示される。

deepxsweep
質問者

お礼

(1)『0』が省略されている、と考えられているわけですね。 IFとの組み合わせがうまく考えられませんでした。 (2)確かにその通りです、ベタ打ちのところでなく、式の結果の ところが…ご指摘頂いた通りにすべて検証してみます。 早々のご返信ありがとうございます。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんにちは。 B1から右にドラッグ 100の桁から B1: ない桁は、空白にする。 =IF((2-COLUMN(A1))>=INT(LOG(ABS($A$1))),"",INT(MOD(ABS($A$1)*10^(COLUMN(A1)-3),10))) SIGN関数ではなくて、ABS関数を使います。 LOG関数は、引数に負の数は使えません。 >(2)一番右の桁の数字がたまにずれるのですが理由が分かりません… >=INT(MOD(SIGN($A$1)*$A$1/0.01,10))  最後の桁がずれるのは、小数点で割って、INTで丸めているからだと思います。

deepxsweep
質問者

お礼

みなさん様々な角度からお答えを頂いて、すごくありがたいです。 ご教示頂いた式も使ってみて、どの方法が私が作成しようと している表に適しているのか、試してみたいと思います。 >SIGN関数ではなくて、ABS関数を使います。 LOG関数は、引数に負の数は使えません。 勉強になります。もっと理解を深めたいと思います。 ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

解答No4です。 式の最後で1を掛けているのは文字を数値に変えるためでしたが、その場合には数位の字数以上の横のセルがエラー表示になりますね。 次の式がよいでしょう。 =IF(COLUMN(A1)>LEN(SUBSTITUTE($A1,".","")),"",MID(SUBSTITUTE($A1,".",""),COLUMN(A1),1)*1) しかし、一つの数字が文字としての数字でもよい場合には次の式でよいでしょう。 =MID(SUBSTITUTE($A1,".",""),COLUMN(A1),1) この式をC1セルに入力し、もちろんB1セルでもかまえません。右横方向にオートフィルドラッグします。

deepxsweep
質問者

お礼

IF、LEN、MIDを組み合わせて、応用させて使うことが 全然できていませんでした。感激です。 式を利用させてもらって作成してみて、 結果から理解を深めようと思います。ありがとうございます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

A1セルに数値があってそれをC1セルから右の列のセルに次々に1つの数字ずつ表示させるのでしたらC1セルに次の式を入力して右横方向にオートフィルドラッグします。 =MID(SUBSTITUTE($A1,".",""),COLUMN(A1),1)*1 この式では何ケタの数字が入力されようと問題なく対応することができます。

回答No.3

No.2です 数式に,を入れるのをわすれていました 失礼しました 修正後 IF(LEN>4,"",・・・・

deepxsweep
質問者

お礼

ありがとうございます! IFとLENで作成してみます。 ずれる理由ですが、研究が足りませんでした。 もう一度どのようなときにどうなっているか、 から見直してみます。

回答No.2

(1) 表示桁でIF文を作れば回避できると思います C1の場合 IF(LEN>4""・・・・ (2) たまにずれる環境をお知らせください。 (どのような数字の場合に、どのような数値になるのか)

関連するQ&A

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

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

    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セルを空白にしたいのですが、 よく分かりません、教えて頂けますか?

  • EXCEL2007での関数について

    すみません、関数について教えてください。 図のように、セルC(=B*0.9)からセルE(=D*0.9)の値を引いてセルFに数字を出したいのですが、 セルCが空白の場合は、セルBの数字を参照してセルFに数字を出すとゆう関数ってありますか? IF関数の勉強不足により、それが可能かどうかがわかりません。 補足:『通常は、セルC-セルE=セルF、でも、セルCが空白の場合は、セルB-セルE=セルF』といった感じの関数があれば教えてくださいm(_ _)m

  • またまたエクセルの関数?ソート??

    甘えてすみません。またご指導願います。 A A A A B C C C D E E F というようなリストがあります。 このリストから B D F だけを省く。 (一回しかでてこない数字を全て省く) というような方法はありますでしょうか? A,B,C,D,E,Fはそれぞれ7桁の数字です。 同じアルファベットは、同じ数字です。 横のセルにも必要情報が入っています。 意味解っていただけるでしょうか・・・・・ すみません・・

  • エクセルVBA ワークシート関数の使用について

    エクセル2003VBA ワークシート関数の使用についての質問です よろしくお願いします。 4桁の数字を、千の位・百の位・十の位・一の位に分解する関数ですが 例えば A1に4桁の数字があり、B1に千の位を表示する場合ですが ワークシート関数の場合 B1=MOD(INT($A$1/1000),10) となりますが VBAにてそのまま使用し Range("B1").value=Application.WorksheetFunction.MOD(INT(Range("A1")/1000),10)とするとエラーになります。 エラーになる原因は、いろいろ調べたら分かったのですが この様に、一発でB1に計算結果を入れたいのですが、どうしたらよろしいでしょうか 現在は、 Range("C1").Formula = "=MOD(INT(A1/1000),10)" Range("B1").value=Range("C1").value 一旦、C1に置き換えてから行っています。 よろしくお願いします

  • エクセル(excel)の計算式(関数)について

    エクセル(excel)の計算式(関数)でよいアイディアがありましたら教えてください。 1行目は項目行です。 セルA1から右に15列=セルO1まで、 a | b | c | d | e | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 と入っています。 2行目からデータとして、 セルA2から右に5列=セルE2まで、 4 | 2 | 2 | 1 | 1 と入力したとします。(データ例(1)) あるいは、 セルA3から右にセルE3まで、 6 | 3 | 0 | 0 | 0 と入力したとします。(データ例(2)) 1つのデータの5個の数字のルールは2つで、 「合計で10以下である。」 「左から順に小さくなるか、同じ数字となる。」 です。 (目的は、) このとき、F列からO列にかけて、 データ例(1)のケースでは、 a | a | a | a | b | b | c | c | d | e データ例(2)のケースでは、 a | a | a | a | a | a | b | b | b | と表示されるように、 つまり、項目行の下にある数だけ、その列の1行目の記号を 1(F列)から右に向かって順に埋めていくような、 F列からO列までの2行目以下に入れる適当な計算式(関数)は ないでしょうか。 拙い説明で申し訳ありません。どなたかよい考えをお持ちの方がいらっしゃいましたらと存じます。 どうぞよろしくお願い致します。

  • Excel2000使用・関数式を教えてください

    A列~AV列まで6桁の数字が入力されています。 行によって、入っている件数(F列までデータが入っているとか、 AC列まで入っているとか)はマチマチです。 入っている数字もマチマチです。 数字の中には、000001、001000など、0から始まる数字もあり、 セルの書式設定はユーザー定義で種類を000000にしています。 別sheetに6桁の数字の一覧があるのですが、 (1)一覧にない数字が入力されているとエラーが表示されるようにしたい また、 (2)6桁の数字は前半3桁と後半3桁が隣の列のセルと一致しないといけないのですが、 不一致の場合は、エラーが表示されるようにしたい 例) A2 000001 B2 001000 C2 000120 D2 120346 E2 346508 F2 508346 G2 346508・・・    A3 123456 B3 456280 C3280002 D3 002428 E3 428508 F3 508346 G3 346213・・・ E2 346508 F2 508346 G2 346508 のように数字が繰り返すこともあります。 Light関数を使うと(2)は解決できたのですが(1)が解決しません =IF(RIGHT(TEXT(入力Sheet1!A2,"000000"),3)=LEFT(TEXT(入力Sheet1!B2,"000000"),3),"","ERR") MATCH関数を使うと =MATCH(入力Sheet1!A2,一覧sheet!$A$2:$A$500,0) (1)は解決したのですが、(2)が解決しません。 (1)(2)とも解決する式、或いは方法を教えて頂けたら助かります。 上記の関数式は、以前、この場で教えていただいたものです。 入力用のシートと別に、検証用のシートを作成しています。 又、もし、もし可能でしたら、別シートにある数字が4桁と5桁と6桁が混在している場合でも流用できるものであるとなお有り難いです。 その場合は前後の3桁が一致するときと、前後の2桁が一致するときがあるという イレギュラーなケースになります。入力した数字は以下のようになります 12345 4512 12650 65034 3458 58260 260013 013134 ・・・ よろしくお願い致しますm(__)m

  • 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に入力する関数が知りたいので、宜しくお願いします。 なお不明な点がありましたら随時補足していこうと思います。

  • エクセル(excel)関数、教えてください

    エクセル(excel)関数なのですが、あまり詳しくないので教えてください。 セルA1、B1、C1 に数字があるのですがA1がB1より大きい数字の場合は セルD1 にA1の数字が出てきて、A1がB1より小さい数字の場合は セルD1 にC1の数字が出てくるように出来るでしょうか。 よろしくお願い致します。

  • エクセル2003の関数について

    =ROUND((A1*B1)*10^(3-INT(LOG(ABS((A1*B1)))))-(MOD((MOD((A1*B1)*10^(3-INT(LOG(ABS((A1*B1))))),100)-5),20)=0),-1)/10^(3-INT(LOG(ABS((A1*B1))))) という数式で有効数字3桁に丸め、尚且つ4桁目が 「5」の場合3桁目が偶数の場合に切り捨て、奇数の場合には切り上げするようにしました (例:123.5→124、122.5→122、122.51→123、1.235→1.24) A1もしくはB1に数字が入っていない場合、「#NUM!」と出ます。 このエラーを表示しない関数(ISERROR)を上記に組み込みたいのですが、うまく組み込みができません。 希望は関数を使用したエラーの非表示ですが、他にナイスな方法があれば教えて下さい。 宜しくお願い致します。

専門家に質問してみよう