У меня есть Clustered Bar Chart
, который подается Values
из B column
из Listobject Table
. A Column
для XValues
. Этот объект ListObject может быть отфильтрован с помощью dropdown selection
для отображения только определенных видимых строк.
Событие On Workbook_SheetChange
, для Sheet1
,
Если в раскрывающемся меню выбрано «Aggr», то 3 аргументом SeriesCollection должен стать
=SERIES("Aggr",(Sheet1!$A$2:$A$4,Sheet1!$A$6:$A$10),(Sheet1!$B$2:$B$4,Sheet1!$B$6:$B$10),1)
, т. е. выбрать несмежные области диапазона из столбца B.
Если в раскрывающемся списке выбрано «Core», то третий аргумент SeriesCollection должен стать следующим:
=SERIES("Core",(Sheet1!$A$2:$A$4,Sheet1!$A$6:$A$10),(Sheet1!$D$2:$D$4,Sheet1!$D$6:$D$10),1)
, т.е. выберите несмежные области диапазонов из столбца D и наоборот.
Мне нужна функция VBA, которая может обрабатывать диапазоны contiguous
и non-contiguous
. Я написал нижеприведенный пример, который работает только для смежных диапазонов, например
=SERIES("Aggr",Sheet1!$A$2:$A$10,Sheet1!$B$2:$B$10,1) ' for Aggr
и
=SERIES("Core",Sheet1!$A$2:$A$10,Sheet1!$D$2:$D$10,1) ' for Core
Вот код, который работает, если seriesCollection такой, как показано выше для смежных диапазонов.
Select Case Target.Value2
Case is = "Aggr" 'selected Aggr in dropdown
For Each Srs In oChart.SeriesCollection
If Srs.Name = "Core" Then
Var = Split(Srs.Formula, ",")
Set Rng = ThisWorkbook.Sheets("Sheet1").Range(Var(2)).Offset(0, -2)
Var(2) = Trim("'" & Mid(Rng.Address(True, True, xlA1, True), InStr(1, Rng.Address(True, True, xlA1, True), "]", vbTextCompare) + 1))
With Srs
.Formula = Join(Var, ",")
.Name = "Aggr"
End With
Exit For
End If
Next Srs
Target.Select
Case is = "Core" 'selected Core in dropdown
For Each Srs In oChart.SeriesCollection
If Srs.Name = "Aggr" Then
Var = Split(Srs.Formula, ",")
Set Rng = ThisWorkbook.Sheets("Sheet1").Range(Var(2)).Offset(0, 2)
Var(2) = Trim("'" & Mid(Rng.Address(True, True, xlA1, True), InStr(1, Rng.Address(True, True, xlA1, True), "]", vbTextCompare) + 1))
With Srs
.Formula = Join(Var, ",")
.Name = "Core"
End With
Exit For
End If
Next Srs
Target.Select
End Select
Как можно изменить этот код для обработки 2 или более несмежных диапазонов?