Построчное построение графиков Excel посредством макроса VBA

Необходимо организовать такой макрос, который при вызове строил бы столько графиков на активном листе, сколько строк в выборке, которая должна быть задана пользователем предварительно перед запуском макроса (конкретно сейчас выборка задаётся посредством InputBox'а). Критерии к отображению графика закомментированы в макросе.

Sub Стройка()
'
' Стройка Макрос
'

'
    'Вводимые данные: начиная с 0(d)0(Re),
    '                 заканчивая последним значением v_(i-тое)(d_(i-тое))v_(j-тое)(Re_(j-тое)) 
    '"_i-тое"/"_j-тое" - обозначил нижний индекс
    Set myRange = Application.InputBox("Выберите диапазон ячеек", Type:=8)
    'range должен быть определён заранее перед исполнением макроса уже выбранными ячейками
    ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
    Dim Re As Integer
    'Re должно принимать значение первой ячейки в строке (1 - заглушка)
    Re = 1
    ActiveChart.ChartTitle.Text = _
    "В зависимости от Re = " & Re
    'зависимость должна быть такой: по Оси ординат-(Y) = v; по Оси абсцисс-(X) = d
    ActiveChart.SetSourceData Source:=myRange
    'С каждой новой строкой в выборке должен создаваться график v = f(d), 
    'не учитывая значения ячеек в первом столбце и первой строки 
    '(посредством циклов For Each...Next или For...Next)
End Sub

Вторая итерация в поисках решения задачи (дебаг показывает, что проблема на строке с передачей ренджа данных в исходники графика):

Sub Создание()

areaCount = Selection.Areas.Count

If areaCount <= 1 Then
    MsgBox "Выбранный массив имеет следующее количество Вариантов Re: " & _
    Selection.Rows.Count & " ."
End If

headRow = Selection.Rows(1)

For Each Rw In Selection.Rows

    curRow = Rw.Rows(i + 1)

    If Rw.Cells(1).Value > 0 Then
        
        Re = Rw.Cells(1).Value
        
        ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
        
        ActiveChart.ChartTitle.Text = _
        "В зависимости от Re = " & Re
        
        ActiveChart.SetSourceData Source:=Range(headRow, curRow) '<--- DEBUG
    
    End If
Next
End Sub

Ссылка на исходник документа с примерами построения графиков disk.yandex.ru

Должно получаться столько графиков, как на картинке под таблицей, сколько строк в таблице, не считая первую: Иллюстрация правильных и неправильных графиков на выходе


Ответы (1 шт):

Автор решения: Герман Шеич

Оказалось, не нужно забывать про Set для каждой переменной, которая принимает в себя Range.

Вот результат без проверки на выбранный диапазон и с графиками в куче:

Sub Создание()

areaCount = Selection.Areas.Count

If areaCount <= 1 Then
    MsgBox "Выбранный массив имеет следующее количество Вариантов Re: " & _
    Selection.Rows.Count & " ."
End If

Set headRow = Selection.Rows(1)

For Each Rw In Selection.Rows

    
    Set curRow = Rw.Rows(i + 1)

    
    If Rw.Cells(1).Value > 0 Then

        Set Sum = Union(headRow, curRow)
        
        Re = Rw.Cells(1).Value
        
        ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
        
        With ActiveChart
            '.Location
            .ChartTitle.Text = _
            "В зависимости от Re = " & Re
            .SetSourceData Source:=Sum, PlotBy:=xlRows
        End With
    End If
Next Rw
End Sub
→ Ссылка