【问题标题】:X Axis isn't charting properlyX 轴无法正确绘制图表
【发布时间】:2013-02-20 20:18:30
【问题描述】:

我有一个为我绘制数据图表的宏。关于宏的所有内容都有 1 个例外:我想重新指定 x 轴标签。宏确实做到了这一点,但它做得不对。在某些情况下,它会改变类别,在其他情况下,它会完全错误地标记类别。该宏应该按产品 ID 绘制数据图表(每个产品 ID 一个图表),然后将 x 轴类别更改为“图表数据”上 F 列中的标签。

在此先感谢您的帮助。

以下是创建图表并随后更改 x 轴的宏部分:

Sub MakeCharts()
Dim sh As Worksheet
Dim rAllData As Range
Dim rChartData As Range
Dim cl As Range
Dim rwStart As Long, rwCnt As Long
Dim chrt As Chart

Set sh = ActiveSheet
ActiveSheet.Range("a1").Select
With sh

' Get reference to all data
    Set rAllData = .Range(.[A2], .[A2].End(xlDown)).Resize(, 5)
    ' Get reference to first cell in data range
    rwStart = 1
    Set cl = rAllData.Cells(rwStart, 1)
    Do While cl <> ""
        ' cl points to first cell in a station data set
        ' Count rows in current data set
        rwCnt = Application.WorksheetFunction. _
           CountIfs(rAllData.Columns(1), cl.Value)
        ' Get reference to current data set range
        Set rChartData = rAllData.Cells(rwStart, 1).Resize(rwCnt, 5)
        ' Create Chart next to data set
        Set chrt = .Shapes.AddChart(xlLineMarkers, _
           rChartData.Width, .Range(.[A2], cl).Height).Chart
        With chrt
            .SetSourceData Source:=rChartData.Offset(0, 1).Resize(, 4)
            ' -----> Set any chart properties here <-----

            ' Add Title
            .SetElement msoElementChartTitleCenteredOverlay
            .ChartTitle.Caption = cl.Value

            'Change chart name
            .Parent.Name = cl.Value

            'Remove Legend
            .SetElement (msoElementLegendNone)

            ' Adjust plot size to allow for title
            .PlotArea.Height = .PlotArea.Height - .ChartTitle.Height
            .PlotArea.Top = .PlotArea.Top + .ChartTitle.Height

            'Change the x-axis to a more organized set
            .SeriesCollection(1).XValues = "='Chart Data'!$F$2:$F$1048576"

            'Set Max and Min for charts
            .Axes(xlValue).MinimumScale = Sheets("Chart Data").Range("K1")
            .Axes(xlValue).MaximumScale = Sheets("Chart Data").Range("K2")

            'Adjust x-axis to tilt 45 degrees top left to bottom right
            .Axes(xlCategory).TickLabels.Orientation = 45



        End With


        ' Get next data set
        rwStart = rwStart + rwCnt
        Set cl = rAllData.Cells(rwStart, 1)
    Loop

End With

【问题讨论】:

  • "='图表数据'!$F$2:$F$1048576" !你已经有rwCnt,所以把标签寄给那个范围:"='Chart Data'!$F$2:$F$" &amp; rwCnt
  • 我的图表仍然没有返回正确的 x 轴类别,但无论如何感谢指针,我对 vba 非常陌生,所以我还不太擅长。
  • 大家好,我已经弄清楚为什么 x 轴没有正确绘制,我不仅无法确定如何解决这个问题。发生的事情是:对于每个产品代码,它都会重置从 F1 开始的 x 轴(我不明白为什么它从 F1 开始,因为我已将 F2 指定为起始位置),然后使用尽可能多的行,在F 列,因为每个产品 ID 都有数据集。所以,对于 RAND RD002,有 8 个数据集,所以它使用 F1:F8;同样,RAND RD003 有 12 个数据集,因此它使用 F1:F12。再次感谢您提供的任何帮助或见解。
  • 那么您是否只需要每个图表中特定行的数据,使用 A?作为标题,B?-E?作为数据,都在同一列,F?作为X轴标签
  • 我需要 A、B、C、D 列中的数据(E 列中没有任何内容),但是我希望宏返回并替换 B 列中的 x 轴标签,使用 F 中的标签,使其看起来更有条理。如果无法发布示例工作簿,很难解释。我能够使用我在下面发布的答案正确地标记 x 轴。感谢您的帮助。

标签: excel charts axis vba


【解决方案1】:

在“将 x 轴更改为更有条理的集合”下,我使用了以下代码:

.SeriesCollection(1).XValues = "='Chart Data'!" & rChartData.Offset(, 5).Resize(, 1).Address

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2018-03-12
    相关资源
    最近更新 更多