通过在 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 的幂(这里:幂 = 2;意思是如果值 >= 100) . 对我来说,这个原始的东西很好用。