搜尋此網誌

2026/03/02

深入理解 Excel VBA 中的 Round 函數:銀行家捨入法並非四捨五入

在使用 Microsoft Excel 搭配 Visual Basic for Applications 自動化運算時,數值四捨五入是一個非常常見、但又容易產生誤解的工作。雖然 VBA 提供了一個叫做 Round 的函數,但它的行為與大多數人預期的「標準四捨五入(round half up)」不同。

本文將深入了解 VBA Round 的運作方式、常見誤區,以及如何正確使用或替代它來達到預期結果。


什麼是 VBA 的 Round 函數?

Microsoft 在 Office 的 Microsoft Visual Basic 的說明文件中描述如下:

Round 函數

傳回一個數值,該數值是按照指定的小數位元數進行四捨五入運算的結果。

語法
Round(expression [,numdecimalplaces])

Round 函數語法有如下幾個單元:
單元 描述
expression 必要引數。要進行四捨五入運算的數值運算式。
numdecimalplaces 選擇性引數。數字值,表示進行四捨五入運算時,小數點右邊應保留的位元數。如果忽略,則 Round 函數傳回整數。

(最新的 Microsoft 文件中已加註說明!)



為什麼 VBA 的 Round 與你以為的不一樣?

你或許認為 Round(2.5, 0) 應該回傳 3,符合我們熟悉的「5 進位」規則。但事實上:

  • Round(2.5, 0) 回傳 2

  • Round(1.5, 0) 回傳 2

  • Round(3.5, 0) 回傳 4


這是因為此函數使用的是《四捨六入五成雙》來處理小數,也就是所謂的 銀行家捨入法(Banker’s Rounding)

什麼是銀行家捨入法(Banker’s Rounding)?

銀行家捨入法(也稱為 round-to-even)是一種統計意義上的捨入方式,其原則是:

當數字的小數部分正好等於 .5 時,將它捨入到最接近的《偶數》。

簡單來說:

  • 1.5 → 捨入 2(偶數)

  • 2.5 → 捨入 2(偶數)

  • 3.5 → 捨入 4(偶數)

  • 4.5 → 捨入 4(偶數)

這樣做的好處是,在大量統計資料中可降低偏差,但與我們日常直覺「四捨五入」不同,是初學者最容易誤解的地方。


範例觀察 VBA 的 Round 差異

以下是一些實際例子,用以比較 VBA Round 與標準四捨五入的不同:

Round(1.4)=1
Round(1.6)=2
Round(1.5)=2
Round(2.4)=2
Round(2.6)=3
Round(2.5)=2
Round(0.12335, 4)=0.1234
Round(0.12345, 4)=0.1234
Round(0.12355, 4)=0.1236
Round(0.12365, 4)=0.1236
Round(0.00005, 4)=0

而 Excel 工作表函數 Round 則為標準四捨五入:
WorksheetFunction.Round(2.5, 0)=3
WorksheetFunction.Round(0.12345, 4)=0.1235
WorksheetFunction.Round(0.12355, 4)=0.1236
WorksheetFunction.Round(0.12365, 4)=0.1237
WorksheetFunction.Round(0.00005, 4)=0.0001

可以看到,在遇到 .5 的情況時,VBA Round 與 Excel 工作表的函數 Round 行為會不同。


如何實現「標準」四捨五入(而不是銀行家捨入)

如果你希望在 VBA 中使用大家熟悉的「5 進位」規則(例如 1.5→2、2.5→3),可以使用 工作表函數

Dim result As Double
result = WorksheetFunction.Round(2.5, 0)

這樣就會得到預期的 3。


當你只想四捨五入到整數

另一個簡單的技巧是利用基本的數學運算:

Int(數值 + 0.5)

這會把數值加上 0.5 再取整數,達到常見的四捨五入效果(不過在負數處理上需留意)。


何時應該特別注意 VBA 的 Round

以下情況特別容易讓人混淆:

✔ 小數精確位數恰好為 .5

銀行家捨入的規則會讓最終結果出現看似怪異的值。

✔ 用於統計或財務報告中

如果不希望捨入偏差影響結果,建議使用工作表函數或自定義捨入法。


總結

方法 行為 規則
VBA Round 銀行家捨入法 .5 捨入到最接近偶數
WorksheetFunction.Round 標準四捨五入 .5 向上捨入
Int(x + 0.5) 最基本的捨入 適用整數捨入
自訂算法 依需求 可滿足特別規則

了解 Round 的內部運作與其默認算法特性,能幫助你在編寫 VBA 程式時避免常見的錯誤,也能更精準地控制數值處理。

沒有留言:

張貼留言