Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2013)
小数点の表示
投稿日時: 19/09/18 08:16:24
投稿者: yamasho

お世話になります。
 
レポートで数字の表示を次のようにしたいと思います。
 
・数字が小数点以下第二位までのときは、0.00の書式で表示。
・数字が小数点以下第二位より多いときは、0.00000の書式で表示
・数字が整数のときは、#,##0の書式で表示
 
INTとIF文の組み合わせでFORMATを指定すればいいのかなとは
思いますが、
私の知識不足でもっと簡単な方法があるのかと思い、
質問させていただきました。
 

回答
投稿日時: 19/09/18 09:42:42
投稿者: sk

引用:
・数字が小数点以下第二位までのときは、0.00の書式で表示。
数字が小数点以下第二位より多いときは、0.00000の書式で表示
・数字が整数のときは、#,##0の書式で表示

「小数点以下の端数部分の桁数が 2 より大きい場合」だとして、
その数値が 0.000001 のような「小数点以下の端数部分の
桁数が 5 より大きく、かつ小数点以下第 1 位から第 5 位までの
全ての桁の数字が 0 であり、かつ端数の繰り上げが発生しない」場合は
「 0.00000 」のように返される(実際の値は 0 ではない)ことになりますが、
そういったケースについては特に考慮しなくてもよいのでしょうか。

投稿日時: 19/09/19 21:21:13
投稿者: yamasho

お世話になります。
 
「0.00000」よりも桁が多くなることはないのですが、
もし「0.00000」よりも桁が多くなる時は、
四捨五入して「0.00000」にしたいです。

回答
投稿日時: 19/09/20 11:07:40
投稿者: sk

引用:
「0.00000」よりも桁が多くなることはないのですが、
もし「0.00000」よりも桁が多くなる時は、
四捨五入して「0.00000」にしたいです。

四捨五入の場合、切り捨てなら 0、切り上げなら 0.00001 になります。
 
その上で、前者においても「 0.00000 」と表示させたいのでしょうか。

投稿日時: 19/09/21 16:01:46
投稿者: yamasho

お世話になります。
 
切り捨てた結果0の場合は「0.00000」と
記載させたいです。
 
元々0の場合は「0」と記載させたいです。
 

回答
投稿日時: 19/09/24 09:49:09
投稿者: sk

引用:
切り捨てた結果0の場合は「0.00000」と
記載させたいです。
  
元々0の場合は「0」と記載させたいです。

「端数を丸める前の小数点以下の桁数」を評価したい、
ということですね。
 
(標準モジュール)
--------------------------------------------------------------
'小数点以下の桁数に応じた数値書式を適用した結果を返すユーザー定義関数
Function FormatX(Number As Variant)
 
    If Not IsNumeric(Number) Then
        FormatX = Number
        Exit Function
    End If
     
    Dim varNumber As Variant
    Dim varDecimal As Variant
    Dim intDigitAfterDecimal As Integer
     
    '十進型に変換
    varNumber = CDec(Number)
    '小数点以下の端数を取得
    varDecimal = Abs(varNumber) - Int(Abs(varNumber))
     
    '小数点以下の端数がない場合
    If varDecimal = 0 Then
        'カンマ区切りの整数表記
        FormatX = Format(varNumber, "#,##0")
        'プロシージャを抜ける
        Exit Function
    End If
     
    '小数点以下の端数の桁の長さを取得
    intDigitAfterDecimal = Len(Mid(varDecimal, 3))
         
    '2桁を超えている場合
    If intDigitAfterDecimal > 2 Then
        '小数点以下第6位で四捨五入し、小数点以下第5位までの端数を
        '後ろゼロ埋めで返す数値書式を適用した結果を戻り値として返す
        FormatX = Format(RoundX(varNumber, 5), "0.00000")
    '1〜2桁である場合
    Else
        '小数点以下第2位までの端数を後ろゼロ埋めで返す
        '数値書式を適用した結果を戻り値として返す
        FormatX = Format(varNumber, "0.00")
    End If
 
End Function
 
'四捨五入方式で数値を丸めた結果を返すユーザー定義関数
Function RoundX(Number As Variant, Optional Digits As Long)
     
    If Not IsNumeric(Number) Then
        RoundX = Null
        Exit Function
    End If
     
    Dim varShift As Variant
     
    varShift = 10 ^ Digits
    RoundX = Int(Abs((CDec(Number) * varShift)) + 0.5) / varShift * Sgn(Number)
 
End Function
--------------------------------------------------------------
 
引用:
レポートで数字の表示を次のようにしたいと思います。

あとはレポート上の任意の演算テキストボックスの
[コントロールソース]プロパティに、以下のような式を
設定なさればよろしいでしょう。
 
--------------------------------------------------------------
 
=FormatX([数値型のフィールドの名前])
 
--------------------------------------------------------------

投稿日時: 19/11/16 22:17:40
投稿者: yamasho

お世話になります。
 
軽く考えてました。
こんなに大変なんですね。
 
私には難しくてすぐには分かりませんが、
これから試してみたいと思います。
 
ありがとうございました。