以下是数据表:
+---+------+---+
| | A | B |
+---+------+---+
| 1 | 5.16 | 6 |
| 2 | 5.15 | 6 |
| 3 | 5.14 | 5 |
+---+------+---+
B列显示了根据阈值.15而不是标准0.5,将数字向上或向下舍入到最接近的整数所需的结果。
我提出以下功能是最好的:
=IF(B1-INT(B1)>=0.15, CEILING(B1, 1), FLOOR(B2, 1))
是否有其他解决方案涉及较少的嵌套函数或较少的整体长度?
答案 0 :(得分:3)
如果你可以使用VBA,你可以创建一个UDF ( U ser D efined F unction)。请注意,这需要您另存为支持宏的工作簿。
Function customRound(ByVal dNum As Double) As Double
With Application.WorksheetFunction
If (dNum - Int(dNum)) >= 0.15 Then
customRound = .Ceiling(dNum, 1)
Else
customRound = .Floor(dNum, 1)
End If
End With
End Function
Protip:只要名称尚未在Excel中保留,您就可以将UDF重命名为您想要的任何名称。在此示例中,我们只是将其命名为customRound()
然后,您就可以用以下内容替换上述公式:
=customRound(B1)
如果您不熟悉VBA,请继续阅读:
如何访问VBE?
当您进入工作簿时,可以通过按 Alt + F11 来访问VBE。好的,所以我打开了VBE。现在我该如何应用这个UDF?
来创建
在左侧窗格中,您将看到工作簿对象模块。这称为 Project Explorer 。您需要创建一个新模块,您可以通过right-clicking inside the Project Explorer > Insert > Module
:现在你可以将UDF粘贴到这个新模块中了,你已经完成了设置!
答案 1 :(得分:3)
这更短:
=ROUND(B1+0.35,0)
答案 2 :(得分:2)
稍长一点:
=IF(RC[-1]-INT(RC[-1])>=0.15,CEILING.MATH(RC[-1]),FLOOR.MATH(RC[-1]))