Excel VBA:使用命名表创建堆积柱形图

时间:2017-09-12 18:48:28

标签: excel vba excel-vba

我正在尝试使用VBA使用excel中大型~30列命名表中的3列数据创建堆积列图。所需的结果将是一个堆积的柱状图,其中列基于“程序”列(在~200行中有5个不同的值),组成列的数字是“保存 - 使用此”与相应的“项目编号”作为那些块标签。每一行都是一个独特的项目。

例如,如果我在“程序1”中有5个项目,我希望将“SAVINGS - USE THIS”值叠加在一起,当我将鼠标移动到列的部分时,项目编号将会秀。

我对VBA相当新,我正在编辑我之前的代码,将项目编号和他们的积蓄变成饼图(原来我不关心程序),所以如果有更好的方法可以做任何事情请告诉我。

Sub CreateChart()

Dim labelRng As Range
Dim dataRng As Range
Dim progRng As Range
Dim chtRng As Range
Dim cht As Object
Dim mySeries As Series
Dim vntValues As Variant
Dim i As Integer

Set chtRng = Union(Sheets("CMF").ListObjects("CMF").ListColumns("Program").Range, _
            Sheets("CMF").ListObjects("CMF").ListColumns("Project Number").Range, _
            Sheets("CMF").ListObjects("CMF").ListColumns("SAVINGS - USE THIS").Range)
'Set progRng = Sheets("CMF").ListObjects("CMF").ListColumns("Program").Range
'Set labelRng = Sheets("CMF").ListObjects("CMF").ListColumns("Project Number").Range
'Set dataRng = Sheets("CMF").ListObjects("CMF").ListColumns("SAVINGS - USE THIS").Range
'Set chtRng = Union(progRng, dataRng, labelRng) 'Sets range for pie

Set cht = Sheets("CMF").Shapes.AddChart2 'Creates chart
For j = cht.Chart.SeriesCollection.Count To 1 Step -1 'Had to be added to avoid errors
    cht.Chart.SeriesCollection(j).Delete
Next j
cht.Chart.SetSourceData chtRng 'Sets data range for chart
cht.Chart.ChartType = xlColumnStacked

如果这是最好的方法,我当前的问题是定义图表的数据范围。你可以看到我正在尝试一些不同的东西,但我遇到的问题是它不是拉“程序”列而是拉动它旁边的列。

作为参考,项目编号位于A列,程序位于C列,SAVINGS位于X列。它正在拉动A,B和X列。即使我将列号指定为“3”或将其拉入不同的顺序,我总是有同样的问题。我没有问题的唯一方法是,如果我停止提取项目编号,只需提取程序和储蓄,就可以了。

我在做什么导致它撤回错误的数据列,一旦我得到正确的数据,我怎样才能使堆叠列按程序组织?

感谢您阅读所有内容!

1 个答案:

答案 0 :(得分:0)

由于你最后只是分配SetSourceData,所以excel会做它认为最好的事情......在这种情况下,这不是你想要的。

尝试一次创建一个不同的系列,并在删除它们后单独指定范围。只需使用宏记录器来完成从头开始创建图表所需的所有步骤。