2011-03-18 346 views
8

在我的一个程序中,我需要计算一系列数字的平均值。问题是,有时答案会出现一个巨大的十进制数,我需要尝试将其最大值降到小数点后两位。VBA Round函数

我见过一种叫做Excel.WorksheetFunction.Round(...)的东西,但据我所知它只适用于特定的数字或特定的细胞。我想知道是否有人知道如何实现这一点,以便它将在一个单元格范围内舍入所有小数。

Excel.WorksheetFunction.Round(ActiveSheet.Range(g_first_Function_Col & "2:" & g_first_Function & g_totalRow).Select, 2) 

上面的代码尝试在一系列单元格上使用循环函数。 g_first_Function_Col是某列(如列“H”),而g_totalRow是其中有任何值的最后一行。当我尝试运行这段代码时,它告诉我“=”是预期的。基本上,我试图选择整个列并围绕它。

谢谢

杰西Smothermon

+0

有趣的方法,请问你为什么要圆每个单元?从你的问题中,听起来总结总数和四舍五入的结果是可行的吗? – 2011-03-18 21:40:36

+0

基本上,程序最多可以接受四个用户输入,用于希望(可以应用于一系列单元格)的操作,例如求和,平均,中位数,最大值等。我不知道答案是什么直到他们在输出中,因为我只是使用excel函数,实际上我并没有在任何地方保存任何东西,直到输出。由于我不知道答案,我想在所有单元格上同时执行此操作,以防随机单元格中有很多小数位 – 2011-03-18 21:52:31

回答

8

有两种方法可以做到这一点。

- 选择你的范围,并更改数字格式:

Range("myrange").Select 
Selection.NumberFormat = "0.00" 

-loop通过在范围内的所有细胞和应用回合函数的每个人。在VBA中,您将无法一次在整个范围内使用Round功能。

For Each currentcell In myRange 
    currentcell.Value = Math.Round(currentcell.Value, 2) 
Next 

(上述伪代码,你需要通过你的范围内的所有小区的更好FOR..NEXT循环来。)

+0

非常感谢,我尝试了第一个建议,并且它的工作方式如何。我真的很想立刻做一个完整的范围来节省时间 – 2011-03-18 21:54:00