如何使用具有两个类别轴的vba制作Excel图表

时间:2015-12-02 10:23:40

标签: excel vba excel-vba

我在excel表中有这样的数据

Country Product Price
America A   43
China   B   13
Germany C   21
Turkey  D   12

在excel中,我选择这些数据并制作一个看起来像这样的图表

Graph from excel

但问题是当我用vba选择相同的数据并从vba中绘制图表时会产生

Graph from vba

现在我希望vba图表显示到类别轴,就像我们从excel中选择数据并绘制图表一样。

简而言之,我希望vba图表能够根据数据自动调整。

这是代码。

Sub CreateChart()

         Range("a1").Select
         Selection.CurrentRegion.Select
         myrange = Selection.Address
         mysheetname = ActiveSheet.Name

         Worksheets(1).Activate
         'ActiveWindow.DisplayGridlines = False

         ' Add a chart to the active sheet.
         ActiveSheet.ChartObjects.Add(125.25, 60, 301.5, 155.25).Select
         Application.CutCopyMode = False

         ActiveChart.ChartWizard _
            Source:=Sheets(mysheetname).Range(myrange), _
            Gallery:=xlColumnStacked, Format:=10, PlotBy:=xlRows, _
            CategoryLabels:=1, SeriesLabels:=1, HasLegend:=1, _
            Title:=charttitle, CategoryTitle:=chartcategory, _
            ValueTitle:=chartvalue, ExtraTitle:=""

      End Sub

3 个答案:

答案 0 :(得分:0)

在Excel中非常简单。插入图表并选择图表数据时记录宏。录音机记录VBA步骤并为您提供整齐的代码,无论何时执行,它都可以执行相同的操作。例如,录音机给了我这两行代码:

Sub Macro1()

    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    ActiveChart.SetSourceData Source:=Range("A2:C5"), PlotBy:=xlColumns

End Sub

很简单,不是吗?

答案 1 :(得分:0)

如果您只想更新现有图表中的数据,可以更好地解决这些问题。 Basicaly创建您想要的图表并为其指定一些名称。 (例如myLovelyChart)

Sub updateChartSO()

        Dim chartSheet As Worksheet
        Set chartSheet = Sheets("testSheet")

        Dim chtSerie As Series

        With chartSheet
            For Each chtSerie In .ChartObjects("myLovelyChart").SeriesCollection

                'specify your values, can be specified by array or even from sheet'
                chtSerie.Values = ""
                chtSerie.XValues = ""
            Next

        End With


End Sub

或者如果您真的想创建新图表,请仔细查看chartType属性(https://msdn.microsoft.com/en-us/library/office/ff820803.aspx)及其枚举(https://msdn.microsoft.com/en-us/library/office/ff838409.aspx

答案 2 :(得分:0)

在VBA中,它会根据数据范围自动定义格式。

但是,您可以使用以下代码来控制它

Chart(1).PlotBy = xlRows

OR

Chart(1).PlotBy = xlColumns