如何纯粹通过使用excel vba进行编程来创build堆积列图表?

我正在试图在VBA中创build一个堆积柱状图,其中有一个条形图,每个条形图显示图上子类别的细目(请参见图片的右侧)。 对于正常的条形图,我所要做的就是创build一个新的系列,并设置Values和XValues属性。 我不知道如何告诉它有关子类别的值。

替代文字http://officeimg.vo.msecnd.net/en-us/files/627/780/ZA010220411.gif

要创build堆积列效果,您需要为列中的每个细分创build一个序列。 比如说,我们有4个动物园。 说他们位于迈阿密,亚特兰大,纽约和拉斯维加斯。 此外,我们有4只动物,狮子,老虎,熊和密封。 而且我们想要一个显示每只动物数量以及动物总数的叠加列。

首先,将图表types设置为xl3DColumnStacked。

ActiveChart.ChartType = xl3DColumnStacked 

然后我们会为每只动物创build一个系列。

 ActiveChart.SeriesCollection.NewSeries 

然后将Values属性设置为动物的值数组,将XValues属性设置为城市的名称数组。 因此,如果第一个系列是狮子会,与迈阿密,亚特兰大,纽约,拉斯维加斯的狮子队和包含string“迈阿密”,“亚特兰大”,等等的数组排列。cityNames数组将被重复使用系列,但狮子座号显然会被replace每一个适当的数组。 即tigerCounts,bearCounts等。

 ActiveChart.SeriesCollection(1).Values = lionCounts ActiveChart.SeriesCollection(1).XValues = cityNames 

这应该是所有需要使用直接从您的程序中的值而不是单元格引用创build堆积列。

以这种方式开始任务最简单的方法是查看手动执行任务时发生的情况,使用macroslogging器捕获VBA等价物。

例如,我只是logging了这个(在Excel XP中,但后来的版本应该是相似的)。 代码和logging一样:

 Option Explicit Sub Macro1() ' ' Macro1 Macro ' Macro recorded 09/07/2010 by MW ' ' Range("B4:D6").Select Charts.Add ActiveChart.ChartType = xlColumnStacked ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B4:D6"), PlotBy:= _ xlRows ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" End Sub 

看上面的内容,我会说第一行, Range("B4:D6").Select是不需要的,因为它进一步下来。

现在清理一下。 这里的对象浏览器可以非常有用。 如果您不熟悉,请尝试在VBA编辑器中按F2。 通过select上方下拉菜单中的“Excel”,在“类别”列表中查看“图表”,缩小上下文。 在“Members …”列表中selectAdd在下面的窗格中显示:

 Function Add([Before], [After], [Count]) As Chart Member of Excel.Charts 

所以Charts.Add返回一个Chart,它必须是在其余代码中重复引用的ActiveChart 。 像这样的复制是乏味的(可能会影响性能),所以我会重做一点。 让我们假设为了练习,我们将在运行macros之前select我们的目标数据,所以当macros运行时它将在Selection 。 在对象浏览器中查看图表的成员,显然SetSourceData中的Source应该是一个Range 。 让我们试试这个:

 Sub Macro1() With Charts.Add .ChartType = xlColumnStacked .SetSourceData Source:=Selection, PlotBy:=xlRows .Location Where:=xlLocationAsObject, Name:="Sheet1" End With End Sub 

它不能在我的机器上工作 – 我认为Selection可能会改变,当一个图表被激活。 所以我们应该在开始使用图表之前捕捉范围:

 Sub CreateStackedColumnChartFromSelection() Dim src As Range Set src = Selection With Charts.Add .ChartType = xlColumnStacked .SetSourceData Source:=src, PlotBy:=xlRows .Location Where:=xlLocationAsObject, Name:="Sheet1" End With End Sub 

从那里,你应该能够find各种自定义(记住对象浏览器!)来得到你想要的图表。 (请记住,根据您的Excel版本,可能会有一些通过VBA无法访问的次要function。)