В Excel VBA мне нужно построить точечный график с динамическими диапазонами

У меня есть таблицы результатов тестов, импортированные из текстовых файлов. Эти таблицы различаются по количеству строк и начальной строке. Я выполнил подпрограммы для поиска начальных и конечных строк.

В следующем коде все в порядке, если начальная и конечная строки равны 12 и 211. Как передать разные индексы в процедуру setsourcedata? Я хочу построить график X по сравнению с Y1 и Y2 на одном графике. Спасибо за любую помощь

With Charts.Add.Location(Where:=xlLocationAsObject, Name:=SheetName)

        .ChartType = xlXYScatterSmoothNoMarkers

        .SetSourceData Sheets("sheet1").Range("A12:A211,C12:C211,AD12:AD211"), xlColumns

        .HasTitle = True
        .ChartTitle.Font.Size = 10
        .ChartTitle.Text = "Test Date " & SheetName
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Text = "Passes"
        .Axes(xlCategory, xlPrimary).MinimumScale = 0
        .Axes(xlCategory, xlPrimary).MaximumScale = 10000
        .Axes(xlCategory, xlPrimary).HasMajorGridlines = True
        .Axes(xlCategory).Crosses = xlMinimum

        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Text = "Rut depth (mm)"
        .Axes(xlValue, xlPrimary).MinimumScale = -15
        .Axes(xlValue, xlPrimary).MaximumScale = 0
        .Axes(xlValue, xlPrimary).Crosses = xlMinimum
        'The Parent property is used to set properties of the Chart.

        With .Parent
              .Name = "MyDataChart"
              .Top = .Parent.Range("F2").Top
              .Left = .Parent.Range("E2").Left
              .Width = 350
              .Height = 200
        End With
  End With

person user3083122    schedule 09.12.2013    source источник


Ответы (1)


Предполагая, что ваши столбцы данных непрерывны (нет прерывистых пробелов), вы можете попробовать что-то вроде:

Dim col1 as Range, col2 as Range, col3 as Range

Set col1 = ActiveSheet.Range("A12",Range("A12").End(xlDown))
Set col2 = col1.Offset(0,2)  'Return column C, same # of rows 
Set col3 = col1.Offset(0,3)  'Return column D, same # of rows 

.SetSourceData Sheets("sheet1").Range(col1.Address & "," & col2.Address & "," & col3.Address)
person David Zemens    schedule 09.12.2013