Excel VBA:以编程方式设置图表生成的X,Y,Z值

以下代码成功生成了具有dynamic变化范围的XY散点图。 但是,我不能克服的障碍是如何以编程方式设置散点图的x,y,z值来生成气泡图。 我已经做了这样的尝试(正如你可以在代码中看到的),但它不起作用。

任何帮助表示赞赏

dim a as long dim b as long dim i as long dim m as long dim j as long For i = 2 To lastrow If Cells(i, "A") = "Regression #" & m & " Output" Then a = i 'save regression #1 row number, where it begins For j = 2 To a If Cells(j, "A") = "Regression #" & m + 1 & " Output" Then b = j End If Next j Set rngx = Range(Cells(b + 1, 2), Cells(a - 1, 2)) Set rngy = Range(Cells(b + 1, 7), Cells(a - 1, 7)) Set rngz = Range(Cells(b + 1, 8), Cells(a - 1, 8)) Sheets("Chart Table").Shapes.AddChart.Select ActiveChart.ChartType = xlBubble ActiveChart.SetSourceData Source:=Union(rngx, rngy, rngz) With ActiveChart.SeriesCollection.NewSeries '.Name = ActiveSheet.Range("B2:B13") .value = rngy .xvalues = rngx .BubbleSizes = rngz End With With ActiveChart .SetElement (msoElementChartTitleAboveChart) .Legend.Delete .ChartTitle.Select .ChartTitle.Text = Cells(a, 1).Value End With Else End If Next i 

例如,如果我只有一行数据(一个x,一个y,一个z) – 那么我希望Excel知道这意味着只有一个泡泡。 现在它读取它作为3个独立的泡沫,无视有一个泡沫大小元素的事实

如果rngx,rngy和rngz的联合是连续的范围,它工作正常。 由于这些范围由多个列分隔,因此您的SetSourceData命令不完整,并将它们的联合对待为一组Y值,并使用默认(1,2,3)作为X值和(1,1,1)作为泡沫大小。

不过,这个小小的修改会修复你的代码:

 ActiveChart.SetSourceData Source:=Union(rngx, rngy, rngz), PlotBy:=xlColumns