我想根据单元格中的值动态地将数字格式化为M(百万),B(十亿)或K(千)。我试过了(但这不起作用):
[>1000000000]0,,,"B";[>1000000]0,,"M";[>1000]0,"K";0”
如果我给出任何两个条件,它会起作用,例如:
[>1000000000]0,,,"B";[>1000000]0,,"M";0
或
[>1000000]0,,"M";[>1000]0,"K";0 )
参考:https://www.sumproduct.com/thought/multiple-number-formatting.html
答案 0 :(得分:2)
This article(第三个例子)提到格式化语句中只允许两个条件:
自定义数字格式最多允许指定两个条件。这是因为只允许四个部分进行自定义数字格式化,两个部分保留。第四部分总是指定文本格式,另外一部分需要详细说明“其他所有”(数字)的格式。
正如Excel 2010帮助中所述:
数字格式最多可包含四个代码段,以分号分隔。这些代码部分按顺序定义正数,负数,零值和文本的格式。
<POSITIVE>;<NEGATIVE>;<ZERO>;<TEXT>
作为中间解决方案,您可以使用我编写的以下VBA函数:
Function FormatNumber(val As Variant) As String
If IsNumeric(val) Then
Dim NumVal As String
NumVal = ""
If val > 1000000000 Then
NumVal = Str(val / 1000000000#) & "B"
ElseIf val > 1000000# Then
NumVal = Str(val / 1000000#) & "M"
ElseIf val > 1000# Then
NumVal = Str(val / 1000#) & "K"
Else
NumVal = Str(val)
End If
FormatNumber = NumVal
Else
FormatNumber = val
End If
End Function
结果是:
第一列是原始数字,第二列是您建议的数字格式,第三列是VBA函数FormatNumber
。请注意,FormatNumber
的结果是字符串,因此您无法使用它们进行计算。