Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用vba制作具有两个分类轴的Excel图表_Vba_Excel - Fatal编程技术网

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

如何用vba制作具有两个分类轴的Excel图表,vba,excel,Vba,Excel,我在excel表格中有这样的数据 Country Product Price America A 43 China B 13 Germany C 21 Turkey D 12 在excel中,我选择了这些数据,并用它们制作了一个类似这样的图表 Country Product Price America A 43 China B 13 Germany C 21 Turkey D 12 但问题是,当我用vba选择相同的数据并从vba中绘制图表时,结果

我在excel表格中有这样的数据

Country Product Price
America A   43
China   B   13
Germany C   21
Turkey  D   12
在excel中,我选择了这些数据,并用它们制作了一个类似这样的图表

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

但问题是,当我用vba选择相同的数据并从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

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

Sub Macro1()

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

End Sub

非常简单,不是吗?

如果您只是想更新现有图表中的数据,更好的解决方案是更新它们。基本上,我会创建你想要的图表,并给它命名。(例如myLovelyChart)


或者,如果您确实想创建新图表,请仔细查看VBA中的
chartType
property()及其枚举()

,它会根据数据范围自动定义格式

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

Chart(1).PlotBy = xlRows


你能加上你的密码吗?编辑您的帖子以包含它;)@R3uK请查看代码。在
ActiveChart.ChartWizard
中,只需将
PlotBy:=xlRows
更改为
PlotBy:=xlColumns
。代码
ActiveSheet.Shapes.AddChart2(201,xlColumnClustered)。选择ActiveChart.SetSourceData:=Range(myrange)
有效。我想再问一件事。我如何在图表中对我的数据进行分组。例如,如果我在美国有两种产品,那么我希望它以这样的方式分组,即美国应该以两种产品出现一次。希望你理解@Jon Peltier。如果没有看到数据和图表,我不知道你到底想要什么。通常,您必须在数据中完成分组,而不是在图表中。代码
ActiveSheet.Shapes.AddChart2(201,xlColumnClustered)。选择ActiveChart.SetSourceData:=Range(myrange)
有效。我想再问一件事。我如何在图表中对我的数据进行分组。例如,如果我在美国有两种产品,那么我希望它以这样的方式分组,美国应该出现一次两种产品。希望您理解@Vimalraj Selvam。将
PlotBy
明确添加到
设置资源数据中是一个好主意,不要依赖默认值(我编辑了答案以反映这一点)。
Chart(1).PlotBy = xlColumns