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

时间:2020-01-22 10:19:28

标签: excel vba

我正在尝试将值记录为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值,我不确定为什么!

2 个答案:

答案 0 :(得分:3)

舍入后

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

答案 1 :(得分:3)

或者(或添加)@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")而不是Set另一个Range变量。