2015-12-02 148 views
0

我在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中选择数据并绘制图表一样。

总之我想让v​​ba图表根据数据自动调整。

这是代码。

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 
+0

您可以将您的代码PLZ?编辑您的文章以包含它;) – R3uK

+0

@ R3uK请看看代码。 – Touqeer

+0

在'ActiveChart.ChartWizard'中,只需将'PlotBy:= xlRows'改为'PlotBy:= xlColumns'。 –

回答

0

它在Excel中非常简单。在插入图表并为图表选择数据时记录一个宏。录音机记录VBA步骤,并为您提供整洁的代码,每当您执行时都可以执行相同的代码。例如,录音机给了我这2行代码:

Sub Macro1() 

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

End Sub 

很简单,不是吗?

+0

代码'ActiveSheet.Shapes.AddChart2(201,xlColumnClustered).Select ActiveChart.SetSourceData Source:= Range(myrange)'works.I想再问一个问题。如何将数据分组到图表中。例如,如果我在美国有两种产品,那么我希望它以这样一种方式进行分组,即美国应该出现两次产品。希望你了解@Vimalraj Selvam。[链接](http://peltiertech.com/chart -with-a-dual-category-axis /) – Touqeer

+0

将'PlotBy'明确地添加到'SetSourceData'是一个好主意,并且不依赖于默认的你想要的(我已经编辑了这个答案来反映这个)。 –

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

0

在VBA中,它自动定义的格式基于数据范围。

然而,您可以通过下面的代码来控制它

Chart(1).PlotBy = xlRows 

OR

Chart(1).PlotBy = xlColumns