- ベストアンサー
桁数の求め方(マクロ)とは?
- Excelのマクロ「桁数の求め方」は、セルに入力された数字の桁数を求めるためのものです。
- 具体的には、セルに入力された数値が1桁以上の場合、その数値の桁数を求めます。
- ただし、数値が0より小さい場合には、10をかけて整数部分の桁数を求めます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
再です。 なるほど、その方法でもOKですね。というより、そちらの方が、 IF文を使わなくていいので、スマートにまとまりますね。 式は、 =INT(LOG10(a1))+(a1>=1) ですね。
その他の回答 (4)
- yaritsusozai
- ベストアンサー率59% (50/84)
表題にマクロとありますが、内容から判断するに、ワークシート関数で対処するもののようですね? Round系の関数を使うと、値が「ちょうど1」の時に誤差が出ますので、そこだけ例外処理を行い、 =IF(a1=1,1,ROUNDUP(LOG(a1),0)) などのようにします。
お礼
回答ありがとうございます。 説明不足で申し訳ありません。 マクロを組んでいる途中、この件の問題にぶち当たりました。ワークシート関数で対処で大丈夫です。 If文による処理をやはりしないといけないですよね。 ありがとうございました。 なんとなく思いついたのですが、A1の数値が1以上であればINT(Log10(A1))+1を使用し、1未満であればINT(Log10(A1))を使用するというやり方でも対応できるのかな?と思いました。 不具合が出ないかの検証はまだきちんとできてないですが。
- Hayashi_Trek
- ベストアンサー率44% (366/818)
ROUNDDOWNやROUNDUPだとうまくいかない数値が有るので、指数形式を使った方法 =IF(A1<1, VALUE(MID(TEXT(A1,"0.0E+00"),5,3)), VALUE(MID(TEXT(A1,"0.0E+00"),5,3))+1)
お礼
回答ありがとうございます。 こんな方法があるのですね。 今の自分にはすぐに理解することはできませんが、じっくり考えてみます。 ありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
セルとかマクロと書いてあるのでExcelの事でしょうか? で、あればセル関数ですが↓でどうでしょう。 =ROUNDUP(LOG10(A1),0)
お礼
回答ありがとうございます。 エクセルのことで大丈夫です。 この式では、実は10や100という数値の時にうまくいかないのです。 ありがとうございました。
- kosukejlampnet
- ベストアンサー率44% (126/282)
num が1より大きい数字のとき numが10のn乗より大きいという条件を満たす間ループ、 ループ内でnをインクリメント。 numが10のn乗より小さくなったときnはnumの桁数に一致する。 手元にVBの実行環境がないのと、うろ覚えなので、PHPで書くとこんな感じです。 $num = 1928131482; $i = 0; $ret = null; while ($num > pow(10, $i)) { $i++; } var_dump($i); 1以下の時は、条件式が逆になるのと、インクリメントじゃなくてデクリメントするだけの違いですね。
お礼
回答ありがとうございます。 PHPはよくわからないのですが、 マクロで組むならdo whileを用いnをインクリメントすればよいということですね。 またpowerを使うのはなるほど、と納得しました。 ありがとうございました。
お礼
回答ありがとうございます。 IF文なしでいけるんですね! A1>=1という記述は初めて見ましたが、TRUEやFALSEを返し、TRUEなら1、FALSEなら0を返すんですね。 ありがとうございました。