Построить точечную диаграмму с помощью команды l oop - PullRequest
0 голосов
/ 15 февраля 2020

основная часть программы показана ниже:

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"

в основном, необходимо построить 50 кривых с помощью приведенного выше сценария в Excel. Интересно, есть ли способ упростить приведенный выше сценарий с помощью оператора al oop, поскольку во всех рядах есть формула для повторения.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Попробуйте.

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
0 голосов
/ 15 февраля 2020

Не проверено:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...