Лично я предпочитаю, чтобы начальная и конечная ячейки моих диапазонов были динамическими, поэтому мой код будет выглядеть примерно так:
ActiveChart.SetSourceData Source:=.Range(.cells(1,5),.cells(7,lastRow))
Но на самом деле только потому, что я предпочитаю обозначение ячейки для определения диапазонов. Ответ Сиддхарта в значительной степени точен.
Для нескольких несмежных диапазонов я бы создал переменную Range, а затем использовал бы Union, чтобы назначить ему любые диапазоны.
Итак, скажем, я хотел столбцы AA, AD и AE, как в примере с Сиддхартом, я бы сделал следующее:
Sub WeeklySuccessOrFailure()
'On Error Resume Next
Dim lastRow As Long
Dim myRange as Range
With Sheets("Data")
lastRow = .range("AA" & Rows.Count).End(xlUp).Row
Charts.Add
Set myRange = Union(.range(.cells(1,27),cells(lastRow,27)),_
.range(.cells(1,30),.cells(lastRow,30)),_
.range(.cells(1,31),.cells(lastRow,31)))
ActiveChart.SetSourceData Source:= myRange
ActiveChart.ChartType = xlColumnClustered
ActiveChart.Location Where:=xlLocationAsObject, Name:="Job Charts"
ActiveChart.Parent.Name = "Total Weekly Success or Failure"
ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)
ActiveChart.ChartTitle.Text = "Total Weekly Success Or Failure Of Jobs"
End With
End Sub
Я не тестировал приведенный выше код, но ранее использовал метод myRange и Union.
Я бы сказал, что это несколько глупее, чем предложение Сиддхарта, но я считаю, что его проще использовать для целей автоматизации. Если вы никогда не собираетесь автоматизировать ту часть вашего макроса, которая находит столбцы для построения графика, т. Е. Всегда будут одни и те же столбцы, то метод Сиддхарта проще и, вероятно, более интуитивен.