• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:桁数の求め方(マクロ))

桁数の求め方(マクロ)とは?

このQ&Aのポイント
  • Excelのマクロ「桁数の求め方」は、セルに入力された数字の桁数を求めるためのものです。
  • 具体的には、セルに入力された数値が1桁以上の場合、その数値の桁数を求めます。
  • ただし、数値が0より小さい場合には、10をかけて整数部分の桁数を求めます。

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

  • ベストアンサー
回答No.5

再です。 なるほど、その方法でもOKですね。というより、そちらの方が、 IF文を使わなくていいので、スマートにまとまりますね。 式は、 =INT(LOG10(a1))+(a1>=1) ですね。

pasize
質問者

お礼

回答ありがとうございます。 IF文なしでいけるんですね! A1>=1という記述は初めて見ましたが、TRUEやFALSEを返し、TRUEなら1、FALSEなら0を返すんですね。 ありがとうございました。

その他の回答 (4)

回答No.4

表題にマクロとありますが、内容から判断するに、ワークシート関数で対処するもののようですね? Round系の関数を使うと、値が「ちょうど1」の時に誤差が出ますので、そこだけ例外処理を行い、 =IF(a1=1,1,ROUNDUP(LOG(a1),0)) などのようにします。

pasize
質問者

お礼

回答ありがとうございます。 説明不足で申し訳ありません。 マクロを組んでいる途中、この件の問題にぶち当たりました。ワークシート関数で対処で大丈夫です。 If文による処理をやはりしないといけないですよね。 ありがとうございました。 なんとなく思いついたのですが、A1の数値が1以上であればINT(Log10(A1))+1を使用し、1未満であればINT(Log10(A1))を使用するというやり方でも対応できるのかな?と思いました。 不具合が出ないかの検証はまだきちんとできてないですが。

回答No.3

ROUNDDOWNやROUNDUPだとうまくいかない数値が有るので、指数形式を使った方法 =IF(A1<1, VALUE(MID(TEXT(A1,"0.0E+00"),5,3)), VALUE(MID(TEXT(A1,"0.0E+00"),5,3))+1)

pasize
質問者

お礼

回答ありがとうございます。 こんな方法があるのですね。 今の自分にはすぐに理解することはできませんが、じっくり考えてみます。 ありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

セルとかマクロと書いてあるのでExcelの事でしょうか? で、あればセル関数ですが↓でどうでしょう。 =ROUNDUP(LOG10(A1),0)

pasize
質問者

お礼

回答ありがとうございます。 エクセルのことで大丈夫です。 この式では、実は10や100という数値の時にうまくいかないのです。 ありがとうございました。

回答No.1

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以下の時は、条件式が逆になるのと、インクリメントじゃなくてデクリメントするだけの違いですね。

pasize
質問者

お礼

回答ありがとうございます。 PHPはよくわからないのですが、 マクロで組むならdo whileを用いnをインクリメントすればよいということですね。 またpowerを使うのはなるほど、と納得しました。 ありがとうございました。

関連するQ&A