実は有効数字ってお仕事で使ったこと無かったりします。
掲示板の話題から思ったことをつらつらと書いてみます。
元ネタの質問
「有効数字2桁で表示(3桁目は切り捨て)」
http://www.excel.studio-kazu.jp/kw/20190526122601.html
質問の内容がとりとめないためか、回答が乱れまくっていますがそれはそれ。
まとめてみます。
質問内容
- 有効数字2桁まで表示したい
- 3桁目は切り捨てしたい
- 2桁目が0の場合は0を表示したい
例)
- 999 → 990
- 12345 → 12000
- 1.5678 → 1.5
- 1.0012 → 1.0
- 0.010012 → 0.010
2桁目が0の場合に0を表示するというのがExcelとしては相性が悪そうです。
1.0とかは勝手に1になってしまいますからね。
書式設定をするにも、例の4番めは「0.0」として、5番目は「0.000」と、有効桁数によって変わってしまう。
文字列が無難でしょうか。
あと3桁目を「切り捨てたい」という要望なので、指数を使いづらいという問題もあります。
指数は四捨五入してしまうので、それがまた回答者たちを混乱させているようにも見えます。
式を2つに分けよう
だいたいこういうときに活躍するのがLOG関数です。
今回の場合は、LOGの値が1以上か1以下かで式を別にしたほうがいいと思いました。
1の場合?どっち使ってもいいんじゃないですかね(適当)
なんとなくですが、実際のところ大きい数字か小さい数字か、どちらかしか使わないと思うんですよね。
LOGが1以上の場合
こっちは上2桁だけとって他の桁を0にすればいいので、こんな感じでしょうか
=LEFT(A1,2)*10^(INT(LOG(A1))-1)
- 999 → 99 * 10 = 990
- 12345 → 12 * 1000 = 12000
LOGが1以下の場合
こっちは有効数字を2桁までLEFTで引っ張ればいいだけですね
=LEFT(A1,3-INT(LOG(A1)))
- 1.5678 → 3文字 → 1.5
- 1.0012 → 3文字 → 1.0
- 0.010012 → 5文字 → 0.010
欠点として、LEFTでくり抜いているだけなので、「6」とかだと当然「6」になり「6.0」にはならない。
蛇足だとは思うけど、それが嫌な場合は最初にTEXTで0をいっぱいつけておくといいかも。
=LEFT(TEXT(A1,"000000000000000000"),3-INT(LOG(A1)))
なんかEXCELの機能にあっても良さそうなのになぁと思うお話でした。