2011-03-18 343 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