• ベストアンサー

エクセルでの桁数の違う小数の表示方法?

エクセルでの小数点以下の桁数が異なる数字で四捨五入して連続する0以外の数字が2桁までに表示する方法を教えてほしいのですが・・・ 説明の仕方がわかりずらいので例をあげると、 1.25なら1.3 0.2274なら0.23 0.000304なら0.0003 となるようにしたいのですが、それぞれ桁数が違うので一度にできません。A4サイズで100以上あるので最初に設定するか、範囲指定をすべての数字にして一度で変換するする方法がよいのですが・・・ よろしくおねがいします。

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

  • ベストアンサー
  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.8

#1 Cupperです ANo.2で maron--5さんが自分の回答に対する補足的な回答している方法では駄目でしょうか # まさか関数でできるとは思っていませんでした # maron--5さん流石です 解説してみます  TEXT(A1,"0.0E+0") これでA1セルの数値を有効桁2桁の指数形式の文字列に変換します 「0.0」 というのが有効桁数です これを 「0.00」とすると有効桁が3桁になります この時点では指数形式の文字列で表示されます  TEXT(A1,"0.0E+0")*1 数値と判断できる文字は数値に直すことなく計算することができる Excelの機能を利用して 四則演算(この場合掛け算)を行うことで文字列を数値化します 1を掛けているので数値的に変わることなく文字列が数値に変わっています この段階でセル幅に収まる桁数であれば指数形式から少数形式の表示になります 指数形式になるときは B列の幅を広げてください  =IF(A1="","",TEXT(A1,"0.0E+0")*1) B列のセルに対するA列のセルが空白であった場合、TEXT関数はエラーを返しますので その対策として、A列のセルが空白であった場合 TEXT関数を使用せず空白を表示するよう IF関数を設定しています この数式をB1セルに入力してB1セルを必要な数だけ下にコピーします B1セルの上にある列を示す 「B」 をクリックしてB列を全体を選択してから Ctrlキーと Dキーを同時に押してもOK B列の最後の行までB1セルが一瞬でコピーできます ※B1セルからB3セルを選択して Ctrl+Dキーを同時に押すとB1からB3まで連続してコピーされます  応用してください こんなんですけどどうでしょう - チョットだけ苦言 - やはりマクロを作る(作ってもらう)時間で100や200のセルを個別に修正できたと思います

bg28417
質問者

お礼

回答有難うございます。 なんとか解決できました。

その他の回答 (7)

noname#140971
noname#140971
回答No.7

? MyRound(1.08) 1.1 これも誤りで 1.08 が正解ならば、条件を満たさない場合は処理しなきゃいい。 つまり、P() 以外に計算除外判定関数を作ればいいです。 [イミディエイト] ? MyRound(0.28) 0.28 ? MyRound(0.0933) 0.093 ? MyRound(0.0311) 0.031 ? MyRound(0.0103) 0.01 ? MyRound(1.25) 1.3 ? MyRound(0.2274) 0.23 ? MyRound(0.000304) 0.0003 ? MyRound(1000.156) 1000.16 ? MyRound(1000.1) 1000.1 あらためて全てテストした結果です。 Public Function NoRound(ByVal S As String) As Boolean   Dim I As Integer   Dim J As Integer   Dim L As Integer   Dim T As String      T = Replace(S, ".", "")   L = Len(T)   For I = 1 To L     J = J - (Mid(T, I, 1) <> "0") - (J > 0 And (Mid(T, I, 1) = "0"))   Next I   NoRound = CBool(J < 3) End Function しかし、まだ、何か違ったケースがありそうな・・・。 しかし、仮にOKだとしても MyRound() が複雑化しましたね。 Public Function MyRound(ByVal M As String) As Currency   If P(M) <> 0 And Not NoRound(M) Then     MyRound = Rounds(CCur(M), 0, P(M))   Else     MyRound = M   End If End Function こういう関数です。

bg28417
質問者

お礼

回答ありがとうございます。 いろいろと書いていただいて申し訳ないのですが 素人なもので理解できません。 もうすこし勉強します。

noname#140971
noname#140971
回答No.6

[イミディエイト] ? MyRound(0.28) 0.3 ? MyRound(0.0933) 0.093 ? MyRound(0.0311) 0.031 ? MyRound(0.0103) 0.01 先の関数 P() ではこのような結果になります。 ? MyRound(1.25) 1.3 ? MyRound(0.28) 0.3 --> 0.28 小数点以下の桁数が異なる数字で四捨五入して連続する0以外の数字が2桁までに表示する方法を教えてほしいのですが・・・ <小数点とか関係なく0以外の数字の並びは2桁>ということかな? ならば、P() をそのように修正すればいいです。

bg28417
質問者

お礼

回答ありがとうございます。 いろいろと書いていただいて申し訳ないのですが 素人なもので理解できません。 もうすこし勉強します。

noname#140971
noname#140971
回答No.5

エクセルは操作したこともない門外漢ですので外しているかもです。 [イミディエイト] ? MyRound(1) 1 ? MyRound(1.25) 1.3 ? MyRound(0.2274) 0.23 ? MyRound(0.000304) 0.0003 と、今、4つだけテストしてみましたが、こういう結果を得たいのでしょうか? Rounds(値、0=四捨五入:1=切り捨て:2=切り上げ、丸めた後の小数部の桁数) ? Rounds(0.2274, 0, 3) 0.227 ? Rounds(0.2274, 0, 2) 0.23 ? Rounds(0.2274, 0, 1) 0.2 ? Rounds(0.2274, 0, 0) 0 と、いうことは以下の Rounds 関数で適当な<丸めた後の小数部の桁数>を指示すること。 ? P(1) 0 ? P(1.25) 1 ? P(0.2274) 2 ? P(0.000304) 5 仮に、このような関数 P() を用意すれば何とかなりそうです。 Public Function Rounds(ByVal M As Currency, _             ByVal A As Integer, _             Optional D As Integer = 0) As Currency     Rounds = Sgn(M) * Fix(Abs(M) * 10 ^ D + Abs((A = 0) * 0.5@ + (A = 2) * (Int(M * 10 ^ D) <> (M * 10 ^ D)))) / 10 ^ D End Function Public Function P(ByVal S As String) As Integer   Dim I As Integer   Dim J As Integer   Dim K As Integer   Dim L As Integer      S = CutStr(S, ".", 2)   L = Len(S)   K = 0   If Len(S) Then     For I = 1 To L       If Mid(S, I, 1) <> 0 Then         J = J + 1         If J = 2 Then           K = I           Exit For         End If       End If     Next I     P = IIf(K = 0, L - 1, K + (K = L))   Else     P = 0   End If End Function Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String     strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function さて、ここまで書けば、関数 MyRound() は書けるんじゃないでしょうか? そこまで書けば丸投げ禁止事項に違反する可能性も・・・。 ヒントは、関数 P() が Currency ではなく String で受け渡していることです。 ※さて、たかだか4つのテストで成功したからって安心できないのがエクセル。 ※VBやAccess では問題なく動くと断言できますが、そうはいかないのがエクセル。 ※そこら辺りは自己責任で・・・。

bg28417
質問者

お礼

回答ありがとうございます。 いろいろと書いていただいて申し訳ないのですが 素人なもので理解できません。 もうすこし勉強します。

noname#204879
noname#204879
回答No.4

=ROUND(A1,-LOG(A1)+2-1*(LOG(A1)>2))

bg28417
質問者

お礼

回答有難うございます。 なんとか解決できました。

  • molly1978
  • ベストアンサー率33% (393/1186)
回答No.3

表示として設定することはできないと思いますが、 有効数字2桁にすることはできます。 元のセルをA1とすると、 =ROUND(A1/10^INT(LOG10(A1)),1)*10^INT(LOG10(A1))

bg28417
質問者

お礼

回答有難うございます。 なんとか解決できました。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

   A       B 1  1.25     1.3 2  0.2274    0.23 3  0.000304  0.0003 B1=IF(A1="","",TEXT(A1,"0.0E+0")*1) ★下にコピー

bg28417
質問者

お礼

回答有難うございます。 なんとか解決できました。

bg28417
質問者

補足

回答ありがとうございます。 素人なので皆さんの回答では応用が効かないのでもう少し具体 敵に説明します。    A     1 0.28       0.28 2 0.0933 これを 0.093 となるように 3 0.0311     0.031 4 0.0103     0.01 有効数字が四捨五入されて二桁でA1の数字をA4まで上から順に3で割る様にしたいのですが・・・ わかりずらい説明ですいません

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

残念ですがすべてのセルに対して設定ひとつでできることではありません ひとつずつ行うかマクロを作りましょう ※マクロを作る時間と労力でひとつずつ処理ことができますよ 同じ項目として扱うデータであれば、数学的に捉らえるならば有効桁を決めて指数形式で表示することをお奨めします

bg28417
質問者

お礼

回答有難うございます。 なんとか解決できました。

bg28417
質問者

補足

回答ありがとうございます。 素人なので皆さんの回答では応用が効かないのでもう少し具体 敵に説明します。    A     1 0.28       0.28 2 0.0933 これを 0.093 となるように 3 0.0311     0.031 4 0.0103     0.01 有効数字が四捨五入されて二桁でA1の数字をA4まで上から順に3で割る様にしたいのですが・・・ わかりずらい説明ですいません。

関連するQ&A

  • エクセルで有効桁を指定して丸めることは出来る?

    excelで普通に四捨五入をするとなると 「ROUND」などで小数点以下の桁数を指定しますよね。 そうではなく、有効桁数3桁で四捨五入…例えば、 0.1234ならば0.123 1.234ならば1.23 12.34ならば12.3 123.4ならば123…のように 数字を四捨五入させる関数(?)はあるのでしょうか。

  • エクセルの表示形式で、10の桁で四捨五入した値を表示させるには?

    エクセルの表で、数字を四捨五入する方法にはROUND関数がありますが、関数で変換すると値そのものが変わってしまいます。 値はそのままで四捨五入した数字で表す方法を教えてください。 小数や一桁の整数までの四捨五入であれば、セルの書式設定・表示形式を「数値」にして小数点以下の桁数を指定してやれば簡単ですが、10の桁以上で丸めて表示させる方法を探しています。 例えば、9876→9880と表示させる書式設定の方法です。 値は計算に使うので、ROUND関数で実際に丸めたくないのです。 ユーザ定義を組み合わせるなどで、うまくできませんか?

  • Excelで任意の桁数で四捨五入させその桁数以下は表示させたくない場合

    Excelで任意の桁数で四捨五入させその桁数以下は表示させたくない場合はどのようにしたらいいでしょうか? 具体的には、売上の数字の百桁目を四捨五入させ、かつ表示では下3桁はカットし(千円)で表示させます。欲を言うと、桁区切りは残したいです。 とても困ってます。 Excel2007です。

  • エクセルで有効桁を指定して丸める

    以前、↓↓にて http://oshiete1.goo.ne.jp/qa1345491.html 「excelで普通に四捨五入をするとなると  『ROUND』などで小数点以下の桁数を指定しますよね。  そうではなく、有効桁数3桁で四捨五入…例えば、  0.1234ならば0.123  1.234ならば1.23  12.34ならば12.3  123.4ならば123…のように  数字を四捨五入させる関数(?)はあるのでしょうか。」 と質問し、 =ROUND(A1,-INT(LOG(A1))-1 + 3) とか =VALUE(TEXT(A1,"0.00E+00")) といった方法を教えていただいたのですが、 0.1234 なら 0.123 ・・・ 123.4 なら 123 までは同じなのですが、 1234.5 なら 1230ではなく1235 12345.6 なら 12300ではなく12346 つまり、1000未満の場合は以前と同じく有効数字3桁で 1000以上の場合は小数点以下四捨五入としたい場合は、 IF関数で =IF(1000>A1 ・・・のように条件指定してやるしかないのでしょうか。 (A1の部分にも長々した数式が入るもので) 数式がかなり長くなってしまい、見づらいので なにか良い方法があればと思ったのですが…

  • 小数点以下の数字の桁数表示について

    VB6.0で小数点以下の数値が0の場合でも指定した桁数で0も表示するにはどのようにしたらよいですか? 例えば、四捨五入のROUND(0.195000,4)のとき返ってくる数値が「0.195」となり最後の0が表示されません。(以下は4桁表示したいのに) (小数点以下第5位が5なら切り上げで最後に1が表示されますが) エクセルだとセルの書式設定で表示桁数を設定するだけだったのですが。 FIXED関数、TEXT関数はVB6.0では使えないのですよね? VB6.0に詳しい方よろしくお願いします。お手数です。

  • エクセル、小数点桁下げの意味

    エクセルの小数点桁下げのボタンを押すのと、 ROUNDで桁数0にするのは同じことなのでしょうか?(四捨五入で整数で表すばあい)

  • エクセルで数字を希望する有効数字にまるめる方法(関数など)を教えてください。

    たとえば有効数字を2桁で表現しなければならない場合、実際のセル内の数値が「0.123なら0.12に、4.56なら4.6に、678なら680に、12345なら12000に変換する。」といったぐわいです。何かよい方法はありませんか。今のところ、かなり面倒なことをやっています(笑)。それは桁数を求める関数によって実際の数値の桁数をよみ取ります。(たとえば5桁)、有効数字の桁数を引き(有効数字2桁表示ならさっきの5から2を引いて3)、最後にその数字の位で四捨五入する(3桁目を四捨五入の関数を使用)という方法です(恥)。

  • エクセルで小数点以下3桁を四捨五入して、小数点以下1桁を表示する方法

    エクセル2003を使用しています。 計算式から出た結果に対して、小数点以下3桁を四捨五入して、小数点以下2桁ではなく、1桁を表示したいです。 例えば、計算式の結果、 1.145 の場合、普通に四捨五入すると 小数点以下1桁なら、1.1 小数点以下2桁なら、1.15 となってしまいます。 これを小数点以下3桁を四捨五入して、小数点以下1桁表示の1.2と表示させたいのですが、可能でしょうか?

  • エクセルの小数点を消す

    とある割合をかけて算出する計算式の答えが、小数点以下8ケタくらいの数字になりました。 ROUNDとかの関数を使えば、四捨五入されるのは知っていたのですが、それを忘れてしまったため、全ての答えに小数点以下の数字が入ってしまいました。 答えから、小数点以下を消したい(できれば四捨五入して)のですが、1コ1コ消していくのしかないのでしょうか??

  • 小数点第2位を四捨五入し…って?

    Excelの表の作成の問題なのですが、頭がこんがらがってきたので質問させてください^^; 「小数点第2位を四捨五入し、小数点以下の桁数が1桁の%表示にすること」…とは、 98.12%を 98.1% ↑のように小数第1位まで表せということですか?

専門家に質問してみよう