对于Excel / VBA中重要数字和尾随零的用户定义函数的建议

时间:2018-07-24 13:08:35

标签: excel vba excel-vba user-defined-functions significant-digits


我已经在下面为工作中的Excel工作表编写了用户定义函数(UDF)。它四舍五入为有效数字,并且能够处理尾随零。

实际上,UDF可以按预期工作!唯一需要注意的是,它将数字转换为文本。

但是,我只是有点怀疑我忽略了某些东西。与我发现的其他功能(例如https://www.vertex42.com/ExcelTips/significant-figures.html)相比,这似乎太简单了。

Public Function ROUNDSF(num As Double, sigFig As Integer)

Dim sigPlace As Integer
Dim numFormat As String

sigPlace = sigFig - (1 + Int(Log(num) / Log(10)))

numFormat = "0." & String(sigPlace, "0")

ROUNDSF= Format(num, numFormat)

End Function

在这个UDF中有什么我忽略的东西吗?或有什么建议?

1 个答案:

答案 0 :(得分:1)

如果您希望它返回一个值,则可以使用以下命令关闭UDF:

ROUNDSF = Val(Format(num, numFormat))

请记住,这将使用现有的默认格式,因此请确保没有格式,或者它与您的要求兼容。

根据文森特(Vincent)的评论,如果用户的语言环境设置可能使用.以外的其他字符作为小数点分隔符,请使用Cdbl:

ROUNDSF = CDbl(Format(num, numFormat))

您还应该捕获-ve SigPlace值,如下所示:

Public Function ROUNDSF(num As Double, sigFig As Integer) As Double

    Dim sigPlace As Integer
    Dim numFormat As String

    sigPlace = sigFig - (1 + Int(Log(num) / Log(10)))

    If sigPlace < 0 Then sigPlace = 0

    numFormat = "0." & String(sigPlace, "0")

    ROUNDSF = Cdbl(Format(num, numFormat))

End Function