• ベストアンサー

《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