我目前正在开发一个包含数百个不同图表的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)
答案 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,即最大值