質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

3回答

21981閲覧

Excel 小数点の桁数判定

iemon-yasu

総合スコア18

0グッド

0クリップ

投稿2017/12/06 06:07

編集2017/12/06 06:27

Excelで、セルに小数点2桁以上入力された場合は条件付き書式でセルを赤くしたいのですが、数式がわかりません。
ぜひ、宜しくお願いします。

インターネット検索で近しいものは見つけられたのですが、解説もなく・・・
=LEN(TEXT(MOD(A1,1)"."&REPT("#",3)))-1

解釈できたのは、MOD関数でA1セルのあまりを取得して、
あまりの中で、小数点(.)以下3桁を指定している・・・?
ようには見えるのですが、他の関数が何をやっているかもわからず。
上手い具合に、自分で編集することもできない状況です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

簡単な判別方法としては「100倍して10で割った余りを求める」です。
例①:1     × 100 ÷ 10 = 10あまり0
例②:1.5   × 100 ÷ 10 = 15あまり0
例③:1.05  × 100 ÷ 10 = 10あまり5
例④:1.005 × 100 ÷ 10 = 10あまり0.5

つまりあまりが0なら小数点1桁以内、0以外は2桁以上とわかります。

余りを求めるにはMOD関数を利用します。

例えばA1セルを100倍して10で割った余りを求めるなら=MOD(A1*100,10)という式になります。
これが0でないときという条件になるので、例えばA1セルの条件付き書式に=MOD(A1*100,10)<>0とすると目的の条件付き書式になると思います。
お試しください。


余談ですが、例えば小数点以下3桁の判断の場合は1000倍した値を10で割った値で判断することになります。
このようにセルの値に10のn剰を掛けた値に対して10で割った余りを求めることになりますので、判定する少数桁数が変動するようでしたら=MOD(A1*10^2,10)<>0としたほうが桁数調整しやすいかもしれません。
参考までに。

(追記)

追記分を見落としておりました。
=LEN(TEXT(MOD(A1,1),"."&REPT("#",3)))-1について、解説はほとんどtakitoさんがしてくれている通りだと思います。

ただ、この式で注意しなければいけないのは小数点以下3桁目までしか見ないということです。
試しに1.0005などをこの式にかけてみるとわかりますが、小数部.0005.000までしか判断材料とならないため.###書式により0に変換されます。
※書式変換の際に少数以下4桁目の丸め処理もしてくれているので、.0006なら.001の扱いとなって3桁と返してくるんですけどね(^-^;

小数桁数がどれくらいまであるのか把握できているのであれば#の数を増やすことで対応できますが、根本的な解決にはならないですね。
というわけで、ご利用に際は注意が必要です。

投稿2017/12/06 07:06

編集2017/12/07 00:50
jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iemon-yasu

2017/12/07 01:19

>jawaさん 考え方から、実現の方法までご教示いただきありがとうございました。 jawaさんの考え方を基にして、無事条件付き書式を設定することができました。 考え方の基礎を学べ、その上で実現までできたことから、jawaさんの投稿をベストアンサーとさせていただきます。 追記情報のコメントも加え、助けていただきありがとうございました。
iemon-yasu

2017/12/11 10:16

>jawaさん ご教授いただいた条件付き書式のロジックで、やりたいことは実現できたのですが、 入力する数値に100億以上の数値が入っている場合は、Excelの字数制限に引っかかり条件付き書式が効かなくなってしまいました。(10,000,000,000*1,000/10=1,000,000,000,000)になってしまうため。 こちら、Excelの字数制限の緩和や、ロジックの変更等で対応できませんでしょうか? 何度もお願いしてしまい申し訳ありませんが、お助けいただけると幸いです。宜しくお願いします。
jawa

2017/12/14 04:27

すごい桁数ですね。。正直そこまでの桁数は想定しておりませんでした。 対応を模索して回答が遅くなってしまいました。すみません。 まず私から提示したアドバイスについてですが、もともとExcel(というよりPC)は少数の計算が苦手で誤差が生じやすいのでできるだけ整数にして計算させようと思っての計算式となっていました。 ※例:「11.1 - 11」という計算はそのまま「= 11.1 - 11」という式にすると誤差が生じて「0.99999…96」という値になってしまいますが、「=(11.1 - 11)*10/10」という式にすると「0.1」という正しい結果が得られます。 Excelの仕様を調べてみたところ、有効桁数は15桁までとなっているようです。 今回は整数部だけでも11桁あり、さらに小数桁がある可能性もあります。 これだけの桁数があると、そもそもExcelで取り扱うこと自体が難しくなってきそうな気がします。 いろいろ桁落ちしないよう検討してみましたが、解決といえるほどの対策が見つかりませんでした。 ・整数部を破棄してから処理する ⇒ MOD(値,1)で小数部のみにする、int関数で整数化したものを元の値から引く、等々試してみたが、その加工時点で誤差が生じてしまう。 ・判断に必要な少数桁+1桁で切り上げる。 ⇒マイナス方向への誤差は丸められるがプラス方向への誤差が生じていた場合に吸収できない。 入力可能な数値を制限するか、それができないのならExcel以外を視野に入れた別の対応を考えなければならないかもしれません。
guest

0

=LEN(TEXT(MOD(A1,1)"."&REPT("#",3)))-1

TEXT関数が成立していない(カンマが無い)のでその点を修正

LEN(TEXT(MOD(A1,1),"."&REPT("#",3)))-1

これがやろうとしていることは

MOD関数を使って整数1で割って余りを出す → 小数点以下を抽出
TEXT関数で".###"の書式にあてはめる → 小数点以下4桁目以降をカット
LEN関数で全体長さから小数点(.)の1文字分を差し引く → 最終の長さが求まる(0~3)

です

これで小数点以下桁数が3以上のものは「3」となります
以上で理解できそうでしょうか?

投稿2017/12/06 07:19

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iemon-yasu

2017/12/07 01:16

>takitoさん わかりやすく解説していただきありがとうございました。自分では理解・解釈の追いつかない表現だったので助かりました。
guest

0

文字列としてはどうでしょうか?

例えば"3.281" だと

小数点の位置を割り出す。

その後、そこから次の位置 ( pos + 1 )から 最後までを取得し、

その桁数が2以上なら セルを赤くする...

みたいにすればいいのでは?

変換

変換


もし、一般ユーザみたいにExcel本体のっていう意味なら

「Excel 小数点」で検索した結果、

任意の小数点以下の桁数に数値を丸める

がヒットしました。

これらはどうでしょうか?

これを赤くするなら、

少数のみ色をつける方法

はどうでしょうか?

小数点があるやつになっていますが、

条件の項目を見ると

= A1 - INT(A1) > 0

となっています。

INT() はたぶん整数値に変換するやつだと思います。

で、これを 小数点2以降ってしたいのですよね。

小数点2以降ってことは...

再度、質問内容を読み返したところ、

"=LEN(TEXT(MOD(A1,1)"."&REPT("#",3)))-1"

とありますね。

検索結果

でしょうか。

たぶん、

"."&REPT("#",3)

の部分は 文字列の連結かなと。

VBAでは

"Hello " & "VBA"

のようにすれば

"Hello VBA" みたいになります。

その意味で、

小数点プラス数値( ワイルドカードって言う感じ? ) と、MODで割り出した値をつけて

MODで割り出した数値 + "." + ワイルドカード的なもの

を文字列 ( TEXT() ) として固めて、その長さ ( LEN() ) の長さから -1 している

のだと思います。

投稿2017/12/06 06:14

編集2017/12/06 07:15
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iemon-yasu

2017/12/06 06:29

> BeatStarさん ご回答ありがとうございます。 考え方はそのイメージでいけると思うのですが、 いかんせん関数に不慣れなもので、数式がわからなくて・・・
BeatStar

2017/12/06 06:31

ん? 数式ってどういうことでしょうか? 使い方ってこと?
iemon-yasu

2017/12/06 06:52

条件付き書式にて使用する数式です。 「数式を使用して、書式設定するセルを決定」にて、 小数3桁以上のセルの書式設定を行いたいと思うのですが、 その数式がなかなか上手くいかない状況です。
BeatStar

2017/12/06 06:58

もしかして、VBAじゃなくて Excel本体のやつ!?? カテゴリにはExcelってあるけど、この掲示板?ってプログラミング用だからVBAかと思った... Excel自体のなら、ここではあまり質問しないほうがいいかも。 勘違いされるし。 メインの回答に返信用を追記しました。
jawa

2017/12/06 07:10

横から失礼しますm(__)m VBAタグとExcelタグは別に用意されていますので、今回はVBAは使わずワークシート関数とシート上の機能だけで実現したいのだと思いますよ。
BeatStar

2017/12/06 07:16

jawaさん。 かもしれませんね。 ですが、最初マジでVBAの方だと思ったので...
iemon-yasu

2017/12/07 01:14

>BeatStarさん 勘違いさせてしまい申し訳ないです。 jawaさんのおっしゃる通り、Excelのワークシート関数及びシート機能を用いての実現を目指しておりました。 次からは質問の仕方を考えて質問させていただきますね。 ありがとうございました! >jawaさん 私の記載漏れによって生じた勘違いでしたが、コメントありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問