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

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

桁数の求め方(マクロ)

セルA1に数字(0より大きい数字で、小数もありうる)が入っているものとします。 これの桁数を求めたいのです。 たとえばA1の値が 3なら   → 1 25なら   → 2 392なら  → 3 501.57なら → 3 という感じです。 ただし1より小さい小数の場合は 0.25なら  → -1 0.096なら → -2 0.00056なら→ -4 としたいです。 要するにA1の数値に対して、0以外の数値が 何桁目で初めて出てくるか、ということを調べたいです。 (説明が分かりにくく、申し訳ありません。) =ROUNDDOWN(LOG10(A1),0)+1 であれば1より大きい数字は対応できます。 しかし1より小さい数字の場合は不具合が起きます。 そのため、 if文を使い、int(A1)が0かどうか判定 0でなければ→=ROUNDDOWN(LOG10(A1),0)+1を使用 0であれば→A1の値に10をかけたものについてintをとり、0でなければ-1を出力。0であればさらに10をかけintをとり、0でなければ-2を出力。0であれば・・・・のループ 等の手順を考えてみましたが、どうにもスマートでなく・・・。 何か良い解決策はありませんでしょうか。 お手数をおかけしますが、 ご教授願えればと思います。 よろしくお願いいたします。

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

  • ベストアンサー
回答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

  • 桁数を求めるプログラム。

    入力した数字の桁数を表示させるというプログラムを考えています。 例) 135 この数字の桁数は3桁です。 などと表示させたいと思っています。 それで、私は入力した数値を10で割っていって入力した数値aがa<=0になったらループを終了して 何回ループしたかのカウンタで桁数を表示させようかと考えました。 たとえば135→13.5→1.35→0.135で整数部分が0となるのでループを打ち切って 3回繰り返したので3桁と表示させたいと思いました。 それでプログラムを考えてみたのですが、どうにもうまくいきいません。 どのように修正したら桁数が表示できるようになるでしょうか? #include <stdio.h> main() { double a=0; int n=1; scanf("%d",&a); while(1) { a=a/10.0; if(a<=0){ break; } n++; } printf("その数は%d桁です。\n",n); }

  • 有効桁数について

    ある数値を5回測定したとします A 5.039 B 5.075 C 5.092 D 5.064 E 5.058 有効桁数はすべて4桁ですよね? 次にA~Eの平均を取ると (A+B+C+D+E)/5=5.0656 と関数電卓で結果がでますが、4桁に丸めて5.066とすれば有効桁数の扱い方としては問題ないですか? そしてA~Eの平均の2乗をするときは、上記の平均を有効桁数4桁に丸めた5.066を2乗して (5.066)^2=25.664356 となり、そして5.066の有効桁数4桁に合わして25.66とすればいいのでしょうか? それとも平均の値を4桁に丸める前の電卓で出た値のまま2乗した後、最終的に4桁に丸めるのがいいのでしょうか?この数値だとどちらでやっても4桁にした値は変わりませんが・・・ 有効桁数の扱い方で問題があったら教えてください、また平均の2乗を求めるときはどちらが正しいのでしょうか? (平均の値の2乗は平均×平均なのだから平均の値を4桁にせず5桁として計算すると平均の2乗は有効桁数5桁と考えるので、やはり正しく平均の値を測定値の有効桁数4桁に丸めて出した平均の値を2乗する方が正しいですかね・・・)    また、上記の平均の計算をしたときのよな、「5」などの数字の有効桁数は何桁ですか?1桁なんでしょうか?もし1桁なら割り算をしているので有効桁数はいちばん桁数の少ないものに合わせるので有効桁数1となると平均の値が「5」となりおかしいとおもうんですが・・・ 上記の平均を取ったときの「5」や、測定回数の数値や、測定していない数で100で割れと書いてあったりしたときは、それらの数字の桁数も考えなければならないんでしょうか? 読みづらい文章かもしれませんが、ご回答待っています。

  • 有意桁数、有効桁数について

    有意桁数というものがあって、それが公に認知されている(出所がJISとかその他の公知規格)ものなのか、また有効桁数との関係等を悩んでいます。どなたかそちら方面に詳しい方がいらっしゃいましたら是非教えてください。お願いいたします。 有意桁数 ・測定値に小数点が含まれている場合、または10のべき乗で示されている場合はべき乗以外のすべての桁を有意桁数とする。 例:0.001ー有意桁数3、1.01ー有意桁数3、3×10⁴-有意桁数1、1.25×10⁵ ー有意桁数3 ・べき乗で示されていない自然数の場合で数値の後ろにゼロがある場合は、ゼロを省いた上位の数字の桁数を有意桁数とするが、1桁となる場合は、”2桁”とみなす(最低でも2桁とする)。 例;5000ー有意桁数2、3150ー有意桁数3、10ー有意桁数2、201ー有意桁数3 ・測定値のToleranceは、有意桁の最下位の1つ下の位で四捨五入する値とする。

  • 有効桁数について

    たとえば整数の3桁割る4桁の場合の数値についてです。 レポートの表に数値を記入するとき,たとえば0.921,0.866,0.995,1.331と計算結果が続くとき 小数点以下の桁数を同じにしてはダメですか? やはり1.331は1.33と記入しないとダメなのでしょうか?私は小数点以下の桁数をそろえて記入したところその理由を問われたのですが,答えられませんでした.小数点以下の桁数をそをえてもいい時のわけを教えてください.   大変困ってます!!!

  • EXCELでの有効数字について

    Excelで有効数字桁数を指定して表示させています =FIXED(A1,A2-1-INT(LOG(A1)),TRUE) A1に数値、A2に有効数字桁数 0.09991 を有効数字桁数3で表示させた場合は 0.0999 となり正常ですが 0.09999 を有効数字桁数3で表示させた場合は 0.1000 となり有効数字4桁になってしまします 丸めて繰り上がる場合も3桁(0.100)にするにはどうしたらよいでしょうか よろしくお願いします

  • 有効桁数とはなんですか?

    小学生でもわかるように単純に説明してくだされば幸いです。 ちなみに、僕は、「精度として、確実性のある(信用できる)桁数」だと思っています。合ってますか? 例えば、123.43の場合、有効桁数4なら、「123.4」が精度として確実性のある桁数で、それ以後の桁は確実性のある(信用できる)数値ではなく、誤差が含まれてる可能性がある。つまり、123.43の3は誤差があると考えていい。 また、有効桁数と有効数字の違いはなんですか?

  • 有効桁数について

    ある測定値75.88と測定値ではない任意の数15などを掛け合わしたとき 電卓でこの計算をすると1138.2となります これは掛け算なので有効桁数は演算における実数の有効桁数が一番少ないもので決まるので、75.88の有効桁数4桁をつかって1138とするのが正しいのでしょうか? それとも(測定値)×(測定値ではない値)のときは有効桁数は考慮しないで1138.2(1138.20?)とした方が良いのでしょうか? 15×75.88とは75.88を15回足すことなので、15回足し算した場合は、1138.20が有効数字の扱い方としては正しいですよね? 大変困っています・・・ 有効数字の扱い方はどうすればよいか教えてください、あまりにも小さい誤差は気にしないとかではなく、有効数字の扱い方はどうすればいいかを教えて欲しいです。

  • 小数点付の数字の桁数を揃える

    >10 を $suu=sprintf("%03d",$suu); このようにして3桁に揃えると >010 ですが、小数ありの数字を上の方法で桁数を揃えると >10.5 だった場合、小数点以下が無視され、 >010 と表示されます。それを、 >010.5 のように小数つきで桁数を揃えたいのですが、 どうすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • Java 出力 桁数調整

    Java初心者です。 JAVAのSytem.out.printの出力の際、 double型の数字の桁数(小数点以下何桁まで表示するか)を調整したいのですが、どのようにやればいいのかわかりません。 教えてください。 あまり詳しくないのでライブラリ等から探す探し方ではなく、 具体的なやりかたを教えてください。 <for emaxple> class warizan{ public static void main(String[] args){ double i=0.0; i = 1/3; System.out.println(i); } } をコンパイルして実行すると出力が 0.33333333333333333333333... となると思うんですが、 0.33 など、小数点以下二桁で出力する方法。 また、よければ大きい数字の桁数調整のやり方も 教えていただけるとうれしいです。 123456789 → 123000000

    • ベストアンサー
    • Java
  • EXCEL 小数点以下の桁数を条件によって変えるには

    G列の書式設定を数値、小数点以下0桁に設定してあります D列にある特定の文字が入力された時だけ、小数点以下の桁数を1桁にしたいのですが、どのようにすればよいでしょうか? それと小数点以下0桁、1桁の数字の桁位置をそろえることはできますか

専門家に質問してみよう