Excel中使用内置工作表函数进行四舍六入处理相对来说比较繁琐,我们可以使用VBA来创建自定义四舍六入函数。

在Excel中,按 Alt+F11 打开 Visual Basic 编辑器,然后单击“插入”>“模块”。 新模块窗口显示在 Visual Basic 编辑器的右侧。将以下代码复制并粘贴到新模块:

Function cfr(x, y)

cfr = Round(x, y)

End Function

上面的代码中,VBA的ROUND函数的功能是将x四舍六入到y位小数。回到工作表界面,就可以在表格中使用刚才的自定义函数了。

对于特定的某些数字,比如2.0045修约到3位小数,以上的自定义函数不能得出正确的结果,我们添加另一个VBA函数:

Function cfrs(x, y)

d = x * 10 ^ y

s = Format(d, "0." & String(15, "0"))

p = InStr(s, ".")

If Right(s, 15) = "5" & String(14, "0") Then

If InStr("02468", Mid(s, p - 1, 1)) > 0 Then

d = d - 0.1 * Sgn(x)

Else

d = d + 0.1 * Sgn(x)

End If

End If

cfrs = Round(d) / 10 ^ y

End Function

这个函数通过将数字转换成字符,再按照修约规则进行判断,对诸如2.0005修约成3位小数这些特定数值也能得出正确的结果。

如果再尝试将MOD(2.0045*1000,2)修约成整数,上面的自定义函数相应语句可以作如下修改:

s = Format(d, "0." & String(8, "0"))

p = InStr(s, ".")

If Right(s, 8) = "5" & String(7, "0") Then

由于Excel数字存储与运算精度限制,在使用以上公式时对结果的正确性应该进行必要的检查。

前面创建的自定义函数只能在当前工作簿中使用,要在不同的工作簿中引用,可以将当前工作簿以Excel加载宏的形式另存到AddIns文件夹中,并在Excel选项里加载项中勾选加载。