Accessで小数を丸める関数は、Int・Fix・Cint・Round があります。
Roundでできそうな感じですができません。
Round関数は、4以下は切り捨て、6以上は切り上げ、5は元の数値が偶数になるよう、切捨てか切り上げが行われるからです。
詳しくは
こちら を参照してください。
そこで四捨五入関数を自作することにします。
[構文]
Function MyRound(f As Double, n1 As Long) As Double
fには元の数値を指定します。
n1は桁位置を指定します。
■ サンプルソフト実行画面
・ 1桁位置で実行
765.432 が 765 となり、切り捨てられています。
・ 2桁位置で実行
765.432 が 765.4 となり、切り捨てられています。
・ 3桁位置で実行
765.432 が 765.43 となり、切り捨てられています。
・ 1桁位置で実行
1234.567 が 1235 となり、切り上げられています。
・ 2桁位置で実行
1234.567 が 1234.6 となり、切り上げられています。
・ 3桁位置で実行
1234.567 が 1234.57 となり、切り上げられています。
■ Access VBA 実行コード
Option Compare Database
Option Explicit
'四捨五入
Private Function MyRound(f As Double, n1 As Long) As Double
Dim pos As Integer
Dim s1 As String
Dim nval As Integer
Dim srcnum As String
Dim signed As Long
Dim roundval As Double
'桁を上げる
f = f * 10 ^ n1
srcnum = Str(f)
If f >= 0 Then
signed = 1
Else
signed = -1
End If
'小数点位置までループ
For pos = 1 To Len(srcnum)
If Mid(srcnum, pos, 1) = "." Then
'次の数字
nval = Val(Mid(srcnum, pos + 1, 1))
Exit For
End If
s1 = s1 & Mid(srcnum, pos, 1)
Next
roundval = Val(s1)
'5以上であれば
If nval >= 5 Then
roundval = roundval + signed
End If
'桁位置を戻す
MyRound = roundval / (10 ^ n1)
End Function
Private Sub コマンド10_Click()
Dim f As Double
If IsNull(Me!テキスト0) Then
MsgBox "四捨五入する数値を入力してください。"
Me!テキスト0.SetFocus
Exit Sub
End If
f = MyRound(Me!テキスト0, Me!フレーム2 - 1)
'結果表示
Me!テキスト11 = f
End Sub