我在VBA的功能實現一個相當原始的解決方案:
Function formatStr(myVal As Double) As String
' the smaller the number, the more digits are to be shown
Dim retStr As String
Dim absVal As Double
absVal = Abs(myVal)
If absVal >= 100 Then
retStr = "0"
ElseIf absVal >= 10 Then retStr = "0.0"
ElseIf absVal >= 1 Then retStr = "0.00"
Else ' number is between -1 and 1
retStr = ".000"
End If
formatStr = retStr
End Function
...然後可以用在VBA語句是這樣的:
myVal = 0.5555: ActiveSheet.Cells(27, 4).Value = Format(myVal, formatStr(myVal))
,如果你想使用一個表單元格您需要另一個小功能
Function FormatAlignDigits(myVal As Double) As Double
FormatAlignDigits = Format(myVal, formatStr(myVal))
End Function
=>您可以輸入= FormatAlignDigits (B27)在您想要結果的單元格中。在本例中B27是具有源數據的單元。
我的測試結果:
100.3 => 100
100.5 => 101
10.53 => 10.5
10.55 => 10.6
1.553 => 1.55
1.555 => 1.56
0.5553 = > 0.555
0.5555 => 0.556
-0.5555 => -0.556
-0.5553 => -0.555
-1.555 => -1.56
-1.553 => -1.55
-10.55 => -10.6
-10.53 => -10.5
-100.5 => -101
-100.3 => -100
我敢肯定,可以有一個更奇特的解決方案,例如函數'formatStr'的一個參數告訴數字的位數下降到0(這裏:power = 2;表示該值是> = 100)。 對我來說這個原始的東西工作得很好。
您是否嘗試過'條件化'格式?在Excel 2010中,您可以根據值(在條件格式中)設置數字格式,並且條件數量沒有限制...... –
在數字而不是小數點處格式化也是非常罕見的...所以你可以有1.27%或99.1%(從99.143%四捨五入),實際上第一個結果比第二個結果更準確,但在同一個數據集中。 – InContext