2015-11-04 176 views
1

我想根据单元格中的值动态地将数字格式化为M(百万),B(十亿)或K(千)。我试图(但不工作):在Excel中有多个条件的数字的条件格式(自定义格式)

[>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

哪个Excel版本? – pnuts

回答

0

(第三个例子)提到格式化语句中只有两个条件是允许的:

自定义数字格式最多允许指定两个条件。这是因为只有四个部分被允许用于自定义数字格式,并且两个被保留。第四部分总是指定文本格式,并且需要另一部分详细说明'其他部分'(数字)将如何格式化。

而作为在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 

导致:

excel number format

第一列是原始数字,第二个数字格式化你建议,第三个与VBA功能FormatNumber。请注意0​​的结果是字符串,所以你不能用它们来计算。