Excel VBA質問箱 IV

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

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


12061 / 13646 ツリー ←次へ | 前へ→

【12615】有効数字 yoshima 04/4/9(金) 11:55 質問
【12618】Re:有効数字 でれすけ 04/4/9(金) 12:52 回答
【12629】Re:有効数字 ぴかる 04/4/9(金) 15:13 回答
【12634】Re:有効数字 yoshima 04/4/9(金) 15:54 質問
【12637】Re:有効数字 ぴかる 04/4/9(金) 16:08 回答
【12641】Re:有効数字 yoshima 04/4/9(金) 16:51 お礼

【12615】有効数字
質問  yoshima  - 04/4/9(金) 11:55 -

引用なし
パスワード
   0〜1の間の任意の数字において
有効数字を一定(例えば3桁)にする方法はありますでしょうか?

例えば、
0.0037269 を 0.00373 (6は四捨五入)に
0.0000008951256 を 0.000000895 に といったような感じです。

表記上ではなく、実際の数値を変換したいのです。

もし、どなたか、分かる人がいましたら、ぜひ、教えてください!
よろしくお願い致します!

【12618】Re:有効数字
回答  でれすけ  - 04/4/9(金) 12:52 -

引用なし
パスワード
   こんにちわ

いったん指数表示の文字列にして、また数値にもどすという方法は
どうでしょうか。

Sub sample()
Dim a1 As Double, a2 As Double

a1 = 0.0037269
a2 = 0.0000008951256

Debug.Print a1; a2

a1 = Effective(a1, 3)
a2 = Effective(a2, 3)

Debug.Print a1; a2

End Sub

Function Effective(ByVal Value As Double, k As Long) As Double
If k < 1 Then
  Effective = Value
Else
  Effective = CDbl(Format(Value, "0." & String(k - 1, "0") & "E+00"))
End If
End Function

【12629】Re:有効数字
回答  ぴかる  - 04/4/9(金) 15:13 -

引用なし
パスワード
   こんにちは。

おもしろそうなんで、あたくしも作ってみました。
どかな?。

Sub TEST()

Dim I As Integer

  For I = 1 To Len(Selection.Value)
    If Selection.Value > 1 / (10 ^ I) Then
      MsgBox Application.RoundUp(Selection.Value, I + 2)
      Exit For
    End If
  Next
  
End Sub

【12634】Re:有効数字
質問  yoshima  - 04/4/9(金) 15:54 -

引用なし
パスワード
   『お礼&追加質問』です。

でれすけさん、そして、ぴかるさん、ご回答いただきましてありがとうございます。ほんと困っていたものですから、回答がありまして本当に嬉しいです!ありがとうございました!

誠に勝手ではございますが、もう少し、ご質問を続けさせてもよろしいでしょうか?(題名の有効数字の内容を超えてしまう質問になってしまうことをお許しください。)

ぴかるさんの案をうまく利用し、
例えば、セル(A1〜A10)にそれぞれ数値(0以上)が記入されているとき、有効数字3桁にした解をセル(B1〜B10)に記載するようなプログラムにするためにはぴかるさんの案をどのように変更・追加したらよろしいのでしょうか?
ただし、数値が1以上の場合は、そのままの数値を解としてほしいのです。
ほんと、素人の質問かも知らないのですが、なにぶん、素人なもので、分かっておりません。。。もし、お分かりになれば、ぜひ、ご回答していただけないでしょうか? 以上、よろしくお願い致します!

【12637】Re:有効数字
回答  ぴかる  - 04/4/9(金) 16:08 -

引用なし
パスワード
   こんなんで、いけると思います。お試しを!

Sub TEST()

Dim I As Integer
Dim J As Integer

  For I = 1 To 10
    If Range("A" & I).Value >= 1 Then
      Range("B" & I).Value = Range("A" & I).Value
    Else
      For J = 1 To Len(Range("A" & I).Value)
        If Range("A" & I).Value > 1 / (10 ^ J) Then
          Range("B" & I).Value = Application.RoundUp(Range("A" & I).Value, J + 2)
          Exit For
        End If
      Next
    End If
  Next
  
End Sub

【12641】Re:有効数字
お礼  yoshima  - 04/4/9(金) 16:51 -

引用なし
パスワード
   無事できました!
なんとお礼を言っていいことでしょうか!
本当に助かりました!ありがとうございました!!

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