Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


988 / 13645 ツリー ←次へ | 前へ→

【77031】0の表示 BSESU 15/5/9(土) 12:03 質問[未読]
【77032】Re:0の表示 マナ 15/5/9(土) 13:34 発言[未読]
【77033】Re:0の表示 BSESU 15/5/9(土) 14:10 質問[未読]
【77034】Re:0の表示←訂正 BSESU 15/5/9(土) 14:15 発言[未読]
【77035】Re:0の表示←訂正 マナ 15/5/9(土) 14:32 発言[未読]
【77036】Re:0の表示←訂正 BSESU 15/5/9(土) 15:28 お礼[未読]
【77037】Re:0の表示←訂正 BSESU 15/5/9(土) 16:57 お礼[未読]
【77062】Re:0の表示 独覚 15/5/12(火) 15:53 発言[未読]
【77063】Re:0の表示 独覚 15/5/12(火) 15:59 発言[未読]

【77031】0の表示
質問  BSESU  - 15/5/9(土) 12:03 -

引用なし
パスワード
   有効数字が3のとき通常のエクセルは1、0.1となり0が省略され仕事柄、後ろの0も重要な意味をもつので、困っています。

例えば、                    

123→123                    
10→10.0(.0を加える)                    
0.1→0.100(.00を加える)

など最初の数字からゼロも含めて3つ表示させたいのです。                    
現在は、目視で手入力をしていますが、色々考え、下記のようなことも考えられるのかなと思ったのですが、表示したい数値が毎回桁が違うため、これらを合わせると膨大な式になってしまうのでマクロで解決できないかと思い、相談させていただきました。

※見づらくて大変申し訳ありません

条件      sample    round2j  Len()    最終表示  
100>=x     123     123     -     123
→ROUND2J(B2,3)
     

100>x>=10    99      99      2     99.0
        11.111    11.1     4     11.1
        99.99    100     3     100    
→IF(100>ROUND2J(B3,3)>=10,IF(D3=2,ROUND2J(B3,3)&".0",ROUND2J(B3,3)))


10>x>=1     3.1123   3.11     4     3.11
         1.1     1.1     3     1.10    
        9.9999   10      2     10.0    
        1      1      1     1.00    
→IF(10>ROUND2J(B6,3)>=1,IF(D6=1,ROUND2J(B6,3)&".00",IF(D6=2,ROUND2J(B6,3)&".0",IF(D6=3,ROUND2J(B6,3)&"0",ROUND2J(B6,3)))))


1>x>=0.1    0.9999   1       1     1.00
         0.654    0.654    5     0.654    
        0.49    0.49     4     0.490    
        0.1     0.1     3     0.100    
→IF(1>ROUND2J(B10,3)>=0.1,IF(D10=1,ROUND2J(B10,3)&".00",IF(D10=3,ROUND2J(B10,3)&"00",IF(D10=4,ROUND2J(B10,3)&"0",ROUND2J(B10,3)))))


0.1>x>=0.01   0.099999  0.1     3     0.100
         0.094444  0.0944    6     0.0944    
        0.01    0.01     4     0.0100    
        0.011    0.011    5     0.0110    
→IF(0.1>ROUND2J(B14,3)>=0.01,IF(D14=3,ROUND2J(B14,3)&"00",IF(D14=4,ROUND2J(B14,3)&"00",IF(D14=5,ROUND2J(B14,3)&"0",ROUND2J(B14,3)))))


0.01>x>=0.001  0.009999  0.01     4     0.0100
         0.00944   0.00944   7     0.00944    
        0.001    0.001    5     0.00100    
        0.0011   0.0011    6     0.00110    
→IF(0.01>ROUND2J(B18,3)>=0.001,IF(D18=4,ROUND2J(B18,3)&"00",IF(D18=5,ROUND2J(B18,3)&"00",IF(D18=6,ROUND2J(B18,3)&"0",ROUND2J(B18,3)))))


0.001>x>=0.0001 0.00099999 0.001    5     0.00100
         0.000944  0.000944   8     0.000944    
        0.0001   0.0001    6     0.000100    
        0.00011   0.00011   7     0.000110
→IF(0.01>ROUND2J(B22,3)>=0.001,IF(D22=5,ROUND2J(B22,3)&"00",IF(D22=6,ROUND2J(B22,3)&"00",IF(D22=7,ROUND2J(B22,3)&"0",ROUND2J(B22,3)))))


0.0001>x>=0.00001 0.000099999 0.0001   6     0.000100
          0.0000944  0.0000944 9     0.0000944    
         0.00001   0.00001  7     0.0000100    
         0.000011  0.000011  8     0.0000110
→IF(0.01>ROUND2J(B26,3)>=0.001,IF(D26=6,ROUND2J(B26,3)&"00",IF(D26=7,ROUND2J(B26,3)&"00",IF(D26=8,ROUND2J(B26,3)&"0",ROUND2J(B26,3)))))
    

ちなみにROUND2J()は下記のような関数になっています

Function ROUNDJ(aa, nn) '数値を丸めて指定した桁数にする
  ROUNDJ = Application.Round(aa, nn)
  If CCur(Abs(ROUNDJ - aa) * 10 ^ (nn + 1)) = 5 And Application.RoundDown(aa, nn) * 10 ^ nn Mod 2 = 0 Then _
  ROUNDJ = Application.RoundDown(aa, nn)
End Function
Function ROUND2J(aa, nn) '数値を任意の有効桁数に四捨五入する
  ROUND2J = ROUNDJ(aa, -Int(Application.Log(Abs(aa))) - 1 + nn)

【77032】Re:0の表示
発言  マナ  - 15/5/9(土) 13:34 -

引用なし
パスワード
   ▼BSESU さん:
文字列にしてしまって良いということでようか?

【77033】Re:0の表示
質問  BSESU  - 15/5/9(土) 14:10 -

引用なし
パスワード
   ▼マナ さん:
>▼BSESU さん:
>文字列にしてしまって良いということでようか?

ご返答、ありがとうございます。

結論から言えば、文字列でOKです。

計算などは、その最終表記するまでで済んでいます。
今回はあくまで、round2J()で指定されている有効数字の値を
見ため上、最終的に表示するためと考えています。

たとえば計算結果が、

計算結果が   1 のとき→表示は 1.00
       98   →     98.0
      0.11   →     0.110
      0.01   →     0.0100

みたいに見ため上、表示させるのが目的です

【77034】Re:0の表示←訂正
発言  BSESU  - 15/5/9(土) 14:15 -

引用なし
パスワード
   0.1→0.100(.00を加える)

と書きましたが、

0.1→0.100(00を加える)

の間違いでした。

【77035】Re:0の表示←訂正
発言  マナ  - 15/5/9(土) 14:32 -

引用なし
パスワード
   こんな感じで考えていました。
深く考えていませんので、問題ないか試してみてください。

Function ROUND2J(aa, nn) '数値を任意の有効桁数に四捨五入する
  Dim k As Long

  k = -Int(Application.Log(Abs(aa))) - 1 + nn

  ROUND2J = ROUNDJ(aa, k)
  If k > 0 Then
    ROUND2J = Format(ROUND2J, "0." & String(k, "0"))
  End If
End Function

【77036】Re:0の表示←訂正
お礼  BSESU  - 15/5/9(土) 15:28 -

引用なし
パスワード
   マナ さん、御返答ありがとうございます。

試してみます。

後日、試した結果とともにあらためてお礼させていただきます。

【77037】Re:0の表示←訂正
お礼  BSESU  - 15/5/9(土) 16:57 -

引用なし
パスワード
   試してみました。

今のところ、願ったとおりの機能を発揮しています。

本当にありがとうございました。

【77062】Re:0の表示
発言  独覚  - 15/5/12(火) 15:53 -

引用なし
パスワード
   ▼BSESU さん:
▼BSESU さん:
今更だけど関数案。
小数点以下9桁より小さい数には未対応だけれども。

=TEXT(A1,SUBSTITUTE(TRIM("0"&" "&IFERROR(REPT("0",2-RIGHT(TEXT(A1,"0.00e+0"),2)),""))," ","."))

【77063】Re:0の表示
発言  独覚  - 15/5/12(火) 15:59 -

引用なし
パスワード
   ▼BSESU さん:
ついでに
0.1234→0.123
0.1235→0.124
1.234→1.23
1.235→1.24
1234→1230
1235→1240
と有効桁数3桁未満で四捨五入して有効桁数に丸める場合。
=TEXT(TEXT(A1,"0.00e+0"),SUBSTITUTE(TRIM("0"&" "&IFERROR(REPT("0",2-RIGHT(TEXT(A1,"0.00e+0"),2)),""))," ","."))

988 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free