簡體   English   中英

Excel中的舍入函數,工作表函數與VBA

[英]Round function in Excel, worksheet function vs VBA

我有一個應用程序,用於返回與大量值中的某些值最接近的匹配(如我之前的問題),我選擇了 VBA 解決方案。 在使用上述應用程序的過程中,我觀察到值 0.5 的結果不正確。 我一直在使用 VBA Round 函數,我發現它返回 0 表示 0.5 舍入為整數,而工作表舍入函數返回 1。奇怪的是,VBA 舍入函數返回 2 表示 1.5。 我不得不用工作表函數代替 VBA 函數。

我錯過了什么嗎?

這是一個已知問題。 VBA Round() 函數使用銀行家的舍入,而電子表格單元格函數使用算術舍入。 在此處查看詳細信息:

PRB:VBA 6 和 Excel 電子表格中的舍入函數不同

Microsoft 提出的解決方法是編寫自定義函數以獲得所需的結果。

銀行家的四舍五入總是將 0.5舍入到最接近的偶數,並且在會計中是標准的,這就是 Excel 以這種方式工作的原因。 算術四舍五入將0.5舍入到下一個數字。

問題在這里完全回答並復制到這里(經作者許可:):

小心,VBA Round函數使用Banker的舍入,它將.5舍入為偶數,如下所示:

Round (12.55, 1) would return 12.6 (rounds up) 
Round (12.65, 1) would return 12.6 (rounds down) 
Round (12.75, 1) would return 12.8 (rounds up)   

而Excel工作表功能回合,總是向上舍入.5。

我做了一些測試,看起來像.5向上舍入(對稱舍入)也用於單元格格式化,也用於列寬舍入(當使用通用數字格式時)。 '精確顯示'標志似乎不會進行任何舍入,它只使用單元格格式的舍入結果。

我嘗試在VBA中實現Microsoft的SymArith函數進行舍入,但是當你嘗試給它一個像58.55這樣的數字時,發現Fix有錯誤。 函數給出58.5而不是58.6的結果。 然后我終於發現你可以使用Excel工作表Round函數,如下所示:

Application.Round(58.55,1)

這將允許您在VBA中進行正常的舍入,盡管它可能不如某些自定義函數快。 我意識到問題已經完全循環,但是想要將其包含在內以便完整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM