VBA四舍五入值

时间:2015-07-13 19:09:46

标签: excel-vba count digits vba excel

我目前正在开发一个包含数百个不同图表的Excel电子表格。我的宏根据数据系列的最小值和最大值选择y轴值。我试图将min和max四舍五入到有意义的数字。例如,如果最小值为926.43轮到900,最大值为1223.21轮到1300.它需要能够处理最小值和最大值为单位数或数百万的数据范围。到目前为止这是我的代码,它在excel中工作但每当我在VBA中运行时,Length总是最终为6。有什么建议吗?

    Set srs = ActiveChart.SeriesCollection(1)
    Min = WorksheetFunction.Min(srs.Values)
    Max = WorksheetFunction.Max(srs.Values)

    Digits = Int(Max)
    Length = Len(Digits) - 2
    MinRound = WorksheetFunction.RoundDown(Min, -Length)
    MaxRound = WorksheetFunction.RoundUp(Max, -Length)

2 个答案:

答案 0 :(得分:1)

您正在寻找MRound。

Dim i as integer
i = 1076
i = Application.worksheetFunction.MRound(i, 100)

这将产生i = 1100

您可以使用它来转到最近的10,100,1000,无论如何。

答案 1 :(得分:0)

我使用两个自定义函数代替workheetfunction.RoundUp和worksheetfunction.RoundDown。将这两个功能放在一个模块中。

Function RDown(Amount As Double, digits As Integer) As Double
          RDown = Int((Amount + (1 / (10 ^ (digits + 1)))) * (10 ^ digits)) / (10 ^ digits)
End Function

Function RUp(Amount As Double, digits As Integer) As Double
    RUp = RDown(Amount + (5 / (10 ^ (digits + 1))), digits)
End Function

RDown(262704615421,-9)= 262000000000,即最小值 Rup(262704615421,-9)= 263000000000,即最大值