• ベストアンサー

エクセルで有効桁を指定して丸める

以前、↓↓にて http://oshiete1.goo.ne.jp/qa1345491.html 「excelで普通に四捨五入をするとなると  『ROUND』などで小数点以下の桁数を指定しますよね。  そうではなく、有効桁数3桁で四捨五入…例えば、  0.1234ならば0.123  1.234ならば1.23  12.34ならば12.3  123.4ならば123…のように  数字を四捨五入させる関数(?)はあるのでしょうか。」 と質問し、 =ROUND(A1,-INT(LOG(A1))-1 + 3) とか =VALUE(TEXT(A1,"0.00E+00")) といった方法を教えていただいたのですが、 0.1234 なら 0.123 ・・・ 123.4 なら 123 までは同じなのですが、 1234.5 なら 1230ではなく1235 12345.6 なら 12300ではなく12346 つまり、1000未満の場合は以前と同じく有効数字3桁で 1000以上の場合は小数点以下四捨五入としたい場合は、 IF関数で =IF(1000>A1 ・・・のように条件指定してやるしかないのでしょうか。 (A1の部分にも長々した数式が入るもので) 数式がかなり長くなってしまい、見づらいので なにか良い方法があればと思ったのですが…

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

#03です =ROUND(A1,2-INT(LOG(A1))) でもいけました。こちらの方が断然短い式になります

kimi28
質問者

お礼

2度もありがとうございます。 なるほど、コチラの方が短い式になりますね。 ありがとうございました!参考にさせていただきます!

その他の回答 (5)

  • redowl
  • ベストアンサー率43% (2140/4926)
回答No.5

#1の方を、参考にして =ROUND(A1,(-INT(LOG(A1))+2)*(A1<1000)) ただし、負の数については、考慮してません。

kimi28
質問者

お礼

回答ありがとうございました。 参考にさせていただきますね。

回答No.4

有効桁数をB1に入れてあるモデルです。「1000以上」ではなく、整 数部が有効桁以上の数値の場合に丸め対象の桁が上がっていかない ようにという観点で考えました。従って、有効桁数が4桁であれば、 10000以上の場合に切り替わります。 =ROUND(A1,MAX(B1-CEILING(LOG(A1),1),0))

kimi28
質問者

お礼

なるほど、有効桁数を指定してということですね。 参考にさせていただきます。ありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

=ROUND(A1*10^(-INT(LOG(A1,10))),2)*10^INT(LOG(A1,10)) ではいかがでしょう。 ただし負の値の場合はLOG関数がエラーになるので適用できません

kimi28
質問者

お礼

回答ありがとうございます。 教えていただいた中では一番私の思っていたものに当てはまります。 こちらの式を使って表をつくってみたいと思います。 ありがとうございました。

noname#140971
noname#140971
回答No.2

123.4---->100 12345.6-->12346 このように丸める桁を値によって変えたい場合は、次のようにも書けます。 =ROUND(A1,(ABS(A1)<1000)*-2) IF関数は論理式で表現できるます。 ですから、論理式を利用すれば丸める桁である0と2をA1の値で切り替えられます。

kimi28
質問者

お礼

すみません、ちょっと仰る数式が私の欲しいものとは違ったようです。 私が知りたいのは 123.4---->123(0.4を四捨五入) 12345.6-->12346 です。 1000未満の場合は有効数字3桁で丸め、 1000以上の場合は小数点以下を丸めて整数にするということです。 分かりづらい質問ですみませんでした。

  • nekoron07
  • ベストアンサー率37% (69/184)
回答No.1

=IF(A1>=1000,ROUND(A1,0),ROUND(A1,-INT(LOG(A1))-1+3)) 長すぎますかね?

kimi28
質問者

お礼

回答ありがとうございます。 仰るのと全く同じやり方で今までやっていたんですが、 質問にも書いたとおりA1の部分に実際はセルを指定するのではなく 長々とした式が入るもので、それが4回も出てくるため もう少し良い方法は無いものかと質問させていただきました。 質問の書き方が言葉足らずでしたね。申し訳ありません。

関連するQ&A