创build一个具有优先级的二维堆积柱状图

我想要做的是创build一个二维堆积图,其中我的系列的位置意味着像他们在一个队列中的位置(位置1 – 作为堆叠列的最高部分是最后得到服务和位置2是堆积柱的底部将首先上升)。

我已经格式化我的数据看起来像这样(但是如果解决scheme需要它可以很容易地更改):

Task 1 Task 2 Task 3 <- x-axis A 100 B 400 B 510 <- This row is position 1 B 200 A 200 A 300 <- This row is position 2 ^-Legend 

我遇到的问题是,我想要在同一图表上的所有任务,并且excel不能识别每个x的位置A和B.它简单地从第一列假定第二行是A,第三行是B,没有根据A / B键在每个后续列中进行调整。 我想知道是否有办法做到这一点。

回顾一下,是否有可能得到一个带有多个x值的二维堆积图,这些x值可以识别每个唯一x值的图例按键的位置(无论它应该位于列的顶部还是底部)。 任何解决scheme,无论是VBA或内部公式我没有任何运气。提前感谢。

 'Run this macro from the sheet containing your data, after highlightling the data. Sub Macro3() 'The below code assumes that you have already selected 'the columns containing your data and that the first column, 'and every 2nd column after that contains your legend keys. Dim rng As Range Set rng = Selection Dim colNum As Integer Dim rowNum As Integer Dim strLegend As String Dim rowStart As Integer Dim colStart As Integer Dim strSeries As String Dim i As Integer Dim seriesNum As Integer Dim shtName As String rowStart = rng.Row colStart = rng.Column shtName = ActiveSheet.Name & "!" 'Creates an empty chart... ActiveSheet.Shapes.AddChart.Select '...of type StackedColumn. ActiveChart.ChartType = xlColumnStacked seriesNum = 0 'Select all the cells that match the legend in the first column. For rowNum = 0 To rng.Rows.Count - 1 strLegend = Cells(rowStart + rowNum, colStart).Value strSeries = "=" & shtName & Cells(rowStart + rowNum, colStart + 1).Address For colNum = 2 To rng.Columns.Count - 1 Step 2 For i = 0 To rng.Rows.Count - 1 If Cells(rowStart + i, colStart + colNum).Value = strLegend Then strSeries = strSeries & "," & shtName & Cells(rowStart + i, colStart + colNum + 1).Address Exit For End If Next Next 'Create a new series. ActiveChart.SeriesCollection.NewSeries seriesNum = seriesNum + 1 'Set the legend. ActiveChart.SeriesCollection(seriesNum).Name = strLegend 'Set the X axis labels to nothing, so the default is used. ActiveChart.SeriesCollection(seriesNum).XValues = "" 'Set the series data. ActiveChart.SeriesCollection(seriesNum).Values = strSeries Next 'An extra series gets added automatically??? 'This code removes it. If ActiveChart.SeriesCollection.Count > rng.Rows.Count Then ActiveChart.SeriesCollection(rng.Rows.Count + 1).Delete End If End Sub 

此代码要求您的图例值和数值分别位于不同的列中,如下所示。 本例中不使用标签“任务1”等。

 A | 100 | B | 400 | B | 510 B | 200 | A | 200 | A | 300