如何使图表轴数字格式与数据集数字格式匹配

时间:2019-01-22 14:33:28

标签: excel vba

我当前正在运行VBA代码,该代码会自动为我设置图表格式。设置y轴标签数字格式的代码部分如下:

If chart1.Type <> xlPie And chart1.Type <> xlDoughnut Then

    If InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") <> 0 And _
    chart1.Axes(xlValue).MaximumScale < 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0%;(#0.0)%"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") <> 0 And _
    chart1.Axes(xlValue).MaximumScale >= 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "##0%;(##0)%"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, ".") <> 0 And _
    InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") = 0 And _
        Len(chart1.Axes(xlValue).MaximumScale) > 2 Then _
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0;(#0.0)"
    Else
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#,##0;(#,##0)"
    End If

    If InStr(chart1.Axes(xlCategory).TickLabels.NumberFormat, "yy") <> 0 Then _
    chart1.Axes(xlCategory).TickLabels.NumberFormat = "mmm yy"

我尝试修改此代码,以便它也可以处理数字格式:“#,## 0.0x;(#,## 0.0)x; 0.0x”

这是我修改的代码:

If chart1.Type <> xlPie And chart1.Type <> xlDoughnut Then

    If InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") <> 0 And _
    chart1.Axes(xlValue).MaximumScale < 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0%;(#0.0)%"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") <> 0 And _
    chart1.Axes(xlValue).MaximumScale >= 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "##0%;(##0)%"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, ".") <> 0 And _
    InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "%") = 0 And _
        Len(chart1.Axes(xlValue).MaximumScale) > 2 Then _
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0;(#0.0)"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") <> 0 And _
    chart1.Axes(xlValue).MaximumScale < 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0x;(#0.0)x"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") <> 0 And _
    chart1.Axes(xlValue).MaximumScale >= 0.1 Then
        chart1.Axes(xlValue).TickLabels.NumberFormat = "##0x;(##0)x"
    ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, ".") <> 0 And _
    InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") = 0 And _
        Len(chart1.Axes(xlValue).MaximumScale) > 2 Then _
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0;(#0.0)"
    Else
        chart1.Axes(xlValue).TickLabels.NumberFormat = "#,##0;(#,##0)"
    End If

    If InStr(chart1.Axes(xlCategory).TickLabels.NumberFormat, "yy") <> 0 Then _
    chart1.Axes(xlCategory).TickLabels.NumberFormat = "mmm yy"

不幸的是,这似乎不起作用。

基本上,如果我有数据集:

2016 0.3倍

2017年0.4倍

2018 0.5倍

图表的y轴标签没有x

有人有什么建议吗?

预先感谢

托马斯

1 个答案:

答案 0 :(得分:0)

Else If语句

ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") <> 0 And _
chart1.Axes(xlValue).MaximumScale < 0.1 Then
    chart1.Axes(xlValue).TickLabels.NumberFormat = "#0.0x;(#0.0)x"
ElseIf InStr(chart1.Axes(xlValue).TickLabels.NumberFormat, "x") <> 0 And _
chart1.Axes(xlValue).MaximumScale >= 0.1 Then
    chart1.Axes(xlValue).TickLabels.NumberFormat = "##0x;(##0)x"

仅在chart1.Axes(xlValue).TickLabels.NumberFormat中已经包含x时评估为true,这意味着除非您的TickLabels已经用所需的x格式化,否则该行代码永远不会是真的。 请尝试将“不等于”运算符<>更改为=,以便在您的TickLabel中找不到x 时,对其进行格式化以使其包含在内。