具有千位分隔符的数字格式和必要时的十进制

时间:2016-03-15 02:59:06

标签: vba excel-vba excel

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

这就是我想要达到的目标:
- " 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."

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

2 个答案:

答案 0 :(得分:2)

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

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

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

123
1,234
1,234.5
1,234.56
1,234.57

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

  • CustomFormat上面显示的VBA功能会将其显示为 .12
  • 为了将其显示为0.12,只需更改" #,###.##"的格式掩码。到" #,##0.##"在CustomFormat函数中,保持其余部分完整。

希望这可能会有所帮助。

答案 1 :(得分:1)

您可以为具有Decimal的用户添加条件格式,然后将默认的数字格式设置为0小数。

  1. 添加条件格式:使用#,##0.##,除非您希望0.5.5
    ConditionalFormatting
  2. 设置默认数字格式
    DefaultNumberFormat
  3. 完成
    Results