如何在VBA中获取图表所有系列的源数据?

时间:2013-04-19 09:01:40

标签: excel vba charts

With ActiveWorkbook.Sheets(1)
INSPECT_CHARTS_NUMBER = .ChartObjects.Count
For c= 1 To .ChartObjects.Count
Set INSPECT_CHART = .ChartObjects(c).Duplicate

.ChartObjects(c).Chart.SetSourceData Source:=.Range("e4:h4")

Next lngC
End With

我这样做是为了更改VBA中图表的源数据,这一行.Chart.SetSourceData Source:=.Range("e4:h4")确实可以正常工作,但如果该图表中有多个系列,这将不起作用。

如何获取所有系列的源数据,然后如何单独更改它们?

3 个答案:

答案 0 :(得分:3)

这是一个例子

假设活动图表的系列集合正在从A1:A5C1:C5中选择值。因此,以下代码会将来源更改为A8:A12C8:C12

Dim sc As SeriesCollection
Dim i as Long, j as Long

j = 1

For i = 1 To ActiveChart.SeriesCollection.Count
    ActiveChart.SeriesCollection(i).Values = "=Sheet1!R8C" & j & ":R12C" & j
    j = j + 2 '<~~ Adding 2 for Col C
Next

<强>截图

enter image description here

enter image description here

答案 1 :(得分:3)

使用.seriescollection

Set ChartSeries = ChartObj.Chart.SeriesCollection.NewSeries

With ChartSeries
    .Name = "Chart Series 1"
    .Values = Array(1, 2, 3, 4, 5)
    .XValues = Array("alpha", "beta", "gamma", "delta", "epsilon")
End With

有关此link的详情。

答案 2 :(得分:2)

您可以通过检索系列 .Formula 字符串来访问图表系列的数据源。

之后您可以更改公式(例如,使用替换),然后重新应用该系列的公式。

代码示例(为Sid的解决方案提供):

Dim chart As ChartObject

For Each chart In ActiveSheet.ChartObjects

    Dim ser As Series

    For Each ser In chart.Chart.SeriesCollection
        Dim oF As String
        Dim nF As String
        oF = ser.Formula
        nF = Replace(oF, "$1", "$8") ' Changing the row 1 to row 8
        nF = Replace(nF, "$5", "$12") ' Changing the row 5 to row 12
        ser.Formula = nF
    Next ser

Next chart

请务必使用 $ 符号,因为系列 .Formula 会使用图表类型表示的数字。该符号有助于省略替换公式中的图表类型。

希望这会有所帮助......