使用循环命令绘制散点图

时间:2020-02-14 23:37:24

标签: excel vba

编程主体如下:

ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = "='7G'!$A$2"
ActiveChart.FullSeriesCollection(1).XValues = "='7G'!$B$2:$B$67"
ActiveChart.FullSeriesCollection(1).Values = "='7G'!$N$2:$N$67"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(2).Name = "='7G'!$A$68"
ActiveChart.FullSeriesCollection(2).XValues = "='7G'!$B$68:$B$133"
ActiveChart.FullSeriesCollection(2).Values = "='7G'!$N$68:$N$133"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(3).Name = "='7G'!$A$134"
ActiveChart.FullSeriesCollection(3).XValues = "='7G'!$B$134:$B199"
ActiveChart.FullSeriesCollection(3).Values = "='7G'!$N$134:$N$199"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(4).Name = "='7G'!$A$200"
ActiveChart.FullSeriesCollection(4).XValues = "='7G'!$B$200:$B$265"
ActiveChart.FullSeriesCollection(4).Values = "='7G'!$N$200:$N$265"

主要,需要在Excel中使用上述脚本绘制50条曲线。想知道是否有一种方法可以通过使用循环语句来简化上述脚本,因为所有系列都有重复的公式。

2 个答案:

答案 0 :(得分:0)

未经测试:

Dim i, rowOff As Long
Dim cht As Chart

Set cht = ActiveChart

For i = 1 To 50
    rowOff = (i - 1) * 66 'calculate offset for this set
    With cht.SeriesCollection.NewSeries
        .Name = Sheets("7G").Range("a2").Offset(rowOff, 0).Value
        .XValues = Sheets("7G").Range("B2:B67").Offset(rowOff, 0).Value
        .Values = Sheets("7G").Range("N2:N67").Offset(rowOff, 0).Value
    End With
Next i

答案 1 :(得分:0)

尝试一下。

Sub test()
    Dim Cht As Chart
    Dim Shs As Series
    Dim Ws As Worksheet
    Dim rngName As Range
    Dim i As Integer, n As Integer

    Set Cht = ActiveChart
    Set Ws = Sheets("7G")
    n = 2
    With Cht
        For i = 1 To 50
            Set rngName = Ws.Range("a" & n)
            Set Shs = .SeriesCollection.NewSeries
            With Shs
                .Name = rngName
                .XValues = rngName.Offset(, 1).Resize(66)
                .Values = rngName.Offset(, 3).Resize(66)
            End With
            n = n + 66
        Next i
    End with

End Sub