如何在Excel VBA中将值舍入为2dp?

如何在Excel VBA中将值舍入为2dp?,excel,vba,Excel,Vba,我试图将一个值记录为2dp,但在使其工作时遇到问题 我有一个包含测试用例的工作簿。宏获取这些测试用例并通过单独的工作簿运行它们。然后将第二个工作簿中的计算值记录回第一个工作簿中 我可以很好地得到所有的值,但希望其中三个是2dp。我现在可以让它们显示为2dp,但当我点击单元格时,实际值约为13dp。如何将值设置为2dp,而不仅仅显示为2dp Dim MPCalc as Single MPCalc = Sheets("Calculation").Cells(45,11).Value MPCalc =

我试图将一个值记录为2dp,但在使其工作时遇到问题

我有一个包含测试用例的工作簿。宏获取这些测试用例并通过单独的工作簿运行它们。然后将第二个工作簿中的计算值记录回第一个工作簿中

我可以很好地得到所有的值,但希望其中三个是2dp。我现在可以让它们显示为2dp,但当我点击单元格时,实际值约为13dp。如何将值设置为2dp,而不仅仅显示为2dp

Dim MPCalc as Single
MPCalc = Sheets("Calculation").Cells(45,11).Value
MPCalc = WorksheetFunction.Round(MPCalc,2)
Cells(i, MPCalc_Col).Value = MPCalc
我尝试过.NumberFormat=“0.00”,format(MPCalc,“0.00”),Round(MPCalc,2),但它们都会带来一个显示为2dp的13dp值,我不知道为什么

四舍五入后

Dim MPCalc As Single
MPCalc = Worksheets("Calculation").Cells(45,11).Value
MPCalc = Application.WorksheetFunction.Round(MPCalc, 2)
舍入值在变量
MPCalc
中,但不在单元格中。因此,您需要将其写回您的手机:

Worksheets("Calculation").Cells(45,11).Value = MPCalc

或者,多功能一体:

With Worksheets("Calculation").Cells(45,11)
    .Value = Application.WorksheetFunction.Round(.Value, 2)
End With
或者(或)在@Peh的回答中添加:

Sub RoundRange()

With Worksheets("Calculation")
    .Range("A1:A4").Value = .[ROUND(A1:A4,2)]
End With

End Sub
或者更动态地:

With Worksheets("Calculation")
    .Range("A1:A4").Value = Application.Round(.Range("A1:A4"), 2)
End With

除了
.Range(“A1:A4”)
之外,您还可以
设置另一个
Range
变量。

在哪里将值写回工作表?另外,你能举一个例子,说明三个值不会四舍五入到2dp吗?简单地格式化一个值不会改变它的实际值,只会改变它的表示形式!我觉得你的代码很好。只需在计算后将该值写回工作表即可。正如JvdV所指出的,格式化只会改变外观,即formatting@Daghan我已经编辑了我的初始帖子,以显示我在哪里记录MPCalc的值。我确信代码应该可以工作,但它没有达到我预期的效果-例如,MPCalc的一个实例是9.012499。。。我想让它返回9.01。“监视”窗口中的值都显示为9.01,记录值时显示的值为9.01,但单击单元格时实际显示的值为9.012499。。。我不确定我遗漏了什么。@JvdV查看我在上面对的答复Daghan@samm那么
单元格(i,MPCalc\u Col)
中的
i
MPCalc\u Col
是什么?可能您没有写入
单元格(45,11)
?那么你看错手机了?另外,您没有指定在哪个工作表
单元格(i,MPCalc\u Col)
中,因此您可能已写入另一个工作表。甚至比循环更好!很好。@Pᴇʜ,是的。但现在我还是删除我的答案吧。呵呵,只是想指出循环=)。我觉得在你的答案下面加上一条评论可能会显得有冒犯性。我应该删除吗?不,为什么要删除?我去掉了答案中的循环。这是一种比循环更快的方法。我认为人们会从这个答案中受益。您可以在范围中添加一个
.Value
,使其绝对清晰;)