如有必要,带有千位分隔符和十进制的数字格式

Pri*_*rop 2 excel vba

我正在尝试创建一个自定义格式,以便数字将以逗号作为千位分隔符显示。如果数字有小数点,我正在努力寻找带有小数点的解决方案(通过反复试验以及搜索),但如果数字是整数,则没有小数点

这是我想要实现的:
- “123”显示为“123”
- “1234”显示为“1,234”
- “1234.5”显示为“1,234.5”
- “1234.56”显示为“1,234.56”
- “1234.567”显示为“1,234.57”

这是我迄今为止尝试过的,但无济于事:

Print Format(1234, "Standard") 'Displays "1,234.00"
Print Format(1234, "#,###.##") 'Displays "1,234."
Run Code Online (Sandbox Code Playgroud)

这些不是想要的结果,因为它不必要地显示小数点。如何在需要时访问小数点,并在不需要时避免使用千位分隔符?

Ale*_*ell 6

您可以使用CustomFormatExcel VBA 中的自定义格式函数来完成此任务,如下所示:

Sub TestFormatString()
    Debug.Print CustomFormat(123)
    Debug.Print CustomFormat(1234)
    Debug.Print CustomFormat(1234.5)
    Debug.Print CustomFormat(1234.56)
    Debug.Print CustomFormat(1234.567)
End Sub

Function CustomFormat(InputValue As Double) As String
    CustomFormat = Format(InputValue, "#,###.##")
    If (Right(CustomFormat, 1) = ".") Then
        CustomFormat = Left(CustomFormat, Len(CustomFormat) - 1)
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

下面显示的结果符合您的要求:

123
1,234
1,234.5
1,234.56
1,234.57
Run Code Online (Sandbox Code Playgroud)

注意:由于您没有指定如何显示小于 1 的数字(例如 0.123),请考虑两种可能的解决方案:

  • CustomFormat 上面显示的 VBA 函数将其显示为 .12
  • 为了显示为0.12,只需将Function中的格式掩码从“ #,###.##”更改为“ #,##0.##”,CustomFormat其余部分保持不变。

希望这可能会有所帮助。