Public Function Round45(n As Double, p As Integer) As Double
Dim s As String, a As String, b As String, x As String, v As Double
If n = 0 Or p < 0 Then Round45 = "": Exit Function
s = Trim(Str(n))
If InStr(s, ".") <> 0 Then
a = Mid(s, 1, InStr(s, ".") - 1)
b = Mid(s, InStr(s, ".") + 1)
Else
a = s
b = ""
End If
If Len(b) <= p Then
Round45 = CDbl(Val(a + "." + b))
Exit Function
Else
If Val(Mid(b, p + 1, 1)) >= 5 Then
x = a + Mid(b, 1, p)
v = CDbl(Val(x))
v = v + 1#
v = v / (10 ^ p)
Round45 = v
Exit Function
Else
Round45 = CDbl(Val(a + "." + b))
Exit Function
End If
End If
End Function