2017-08-24 100 views
0

当数据为数千和数百万时,我需要在“$ K”和“$ M”中有条件地格式化标签值。我一直在使用以下格式,它们分别在Excel单元格($#,## 0.0,“K”)和($#,## 0.00,“M”)中工作得非常好,这在我使用它时不起作用格式化使用VBA与下面的代码标签标题:如何在Excel VBA中执行标签的条件格式化

lblInvestmentValue.Caption = Format(CStr(dblInvestmentVal), "[>=1000000] $#,##0.0,,""M"";[>0] $#,##0.0, ""K"";General") 

使用此我得到以下输出

dblInvestmentVal Caption  Expected Caption 
812    $812.0M  $812 
8280119   $8,280,119.0M $8.29M 
91281   $12,367.0M  $12.4K 

任何指针

+0

为什么您使用CSTR()吗?为什么不是val()? – Sixthsense

+0

@Sixthsense dblInvestmentVal变量是一个双变量,我之前使用了一些连接,因此将其转换为字符串。我刚刚尝试过使用Val()以及现在,不影响结果 – hbabbar

+0

dblInvestmentVal textbox的值是什么? – Sixthsense

回答

1

你可以使用一个IIF语句。

lblInventmentValue.Caption = IIF(Abs(dblInvestmentVal) >= 1000000, Format(dblInvestmentVal/1000000, "$#,##0.0,,""M"""),IIF(Abs(dblInvestmentVal) >= 1000, Format(dblInvestmentVal/1000, "$#,##0.0,,""K"""),Format(dblInvestmentVal, "$#,##0.0"))) 

语句使用Abs(dblInventmentVal)也可以正确格式化negativ数字。

+0

完美。如果我理解正确,我有一个问题,因为条件的语法不正确? – hbabbar

0

我不知道这条件数字格式是由format命令支持,但是你可以很容易地替换此:

Function ConditionalFormatNumber(n As Double) As String 
    If n > 1000000 Then 
     ConditionalFormatNumber = Format(n/1000000, "$#,##0.00,,""M""") 
    ElseIf n > 1000 Then 
     ConditionalFormatNumber = Format(n/1000, "$#,##0.00, ""K""") 
    Else 
     ConditionalFormatNumber = Format(n, "$#,##0.0") 
    End If 
End Function