如何在Excel VBA

时间:2017-08-24 08:47:28

标签: excel vba excel-vba formatting

当数据为千万和数百万时,我需要在“$ K”和“$ M”中有条件地格式化标签值。我一直在使用以下格式,它在Excel单元格($#,## 0.0,“K”)和($#,## 0.00,“M”)中分别工作得很好,当我使用它时这不起作用使用带有以下代码的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

任何指针

3 个答案:

答案 0 :(得分: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)来正确地格式化否定数字。

答案 1 :(得分: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

答案 2 :(得分:0)

TEXT工作表函数似乎遵循您最初指定的格式,您可以借助Application.WorksheetFunction在VBA中使用它。

Application.WorksheetFunction.Text(812, "[>=1000000] $#,##0.0,,""M"";[>0] $#,##0.0, ""K"";General")

VBA reference for FORMAT不涉及条件数字格式,但是它具有数字格式部分,因此我希望条件数字格式无效-尽管我发现使用它默认为第一个模式很有趣您指定的格式。