针对相同string值的范围dynamic绘制图表

示例数据集在http://bit.ly/1L67ZFu给出我从这些由下面的代码得到的图表在http://bit.ly/1P73A2U

在下面的代码中,行固定从1到7.我有dynamic数量的部门和dynamic数字od参数说我可以有参数,直到参数6和每个参数可以发生任何次数列1。如果我想dynamic绘制所有参数的图表,我该如何修改代码。 我希望代码根据相同的参数绘制行的图表。 如果参数的数量是从参数1到参数7,我总共需要14个图表。build议在代码中对此进行修改。

Sub PlotSeparateChartsByMergedFirstRow() Dim rUsed As Range, rMerged As Range, rChtData As Range Dim rChtDat1 As Range, rChtDat2 As Range Dim iColMerge As Long, iColData As Long Dim cht1 As Chart, cht2 As Chart Dim lastCol As Integer Const iChtHeight As Double = 175 lastCol = ActiveSheet.Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column Set rUsed = ActiveSheet.Range(Cells(1, 2), Cells(7, lastCol)) iColMerge = 1 Do iColMerge = iColMerge + 1 If iColMerge > rUsed.Columns.Count Then Exit Do If rUsed.Cells(1, iColMerge).mergecells Then Set rMerged = rUsed.Cells(1, iColMerge).MergeArea Set rChtData = rMerged.Resize(rUsed.Rows.Count) ' x values Set rChtDat1 = rUsed.Columns(1) Set rChtDat2 = rUsed.Columns(1) ' y values For iColData = 1 To rChtData.Columns.Count - 1 Step 2 Set rChtDat1 = Union(rChtDat1, rChtData.Columns(iColData)) Set rChtDat2 = Union(rChtDat2, rChtData.Columns(iColData + 1)) Next ' charts ' 2007, 2010 Set cht1 = ActiveSheet.Shapes.AddChart(xlColumnClustered, rChtData.left, rChtData.Height, rChtData.Width, iChtHeight).Chart ' 2013 'Set cht1 = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, rChtData.Left, rChtData.Height, rChtData.Width, iChtHeight).Chart With cht1 .HasTitle = True .ChartTitle.Text = "=" & rUsed.Cells(1, iColMerge).Address(, , , True) .SetSourceData rChtDat1, xlColumns End With ' 2007, 2010 Set cht2 = ActiveSheet.Shapes.AddChart(xlColumnClustered, rChtData.left, rChtData.Height + iChtHeight, _ rChtData.Width, iChtHeight).Chart ' 2013 'Set cht2 = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, rChtData.Left, rChtData.Height + iChtHeight, rChtData.Width, iChtHeight).Chart With cht2 .HasTitle = True .ChartTitle.Text = "=" & rUsed.Cells(1, iColMerge).Address(, , , True) .SetSourceData rChtDat2, xlColumns End With End If iColMerge = iColMerge + rMerged.Columns.Count - 1 Loop End Sub