Для этого не нужно VBA
.
Давайте начнем иметь следующую таблицу с именем Sheet1
:
Теперь нам нужно три именованных диапазона. Один для всего диапазона, который мы получаем косвенной формой C1
, один для категорий, который является левым столбцом всего диапазона, и один для значений, который является правым столбцом всего диапазона.
Так в менеджер имен мы создаем следующие именованные диапазоны:
Обратите внимание, что все именованные диапазоны находятся в области действия листа Sheet1
и , а не в объеме рабочей книги. Поэтому при создании именованных диапазонов всегда выбирайте область Sheet1
вместо Workbook
Имя myRange
относится к =INDIRECT(Sheet1!$C$1)
. Таким образом, он получает диапазон от значения этой ячейки.
Имя myCategories
относится к =INDEX(Sheet1!myRange,,1)
. Это получает все строки (так как никакой специальной строки не задано) из столбца 1
из myRange
.
Имя myValues
относится к =INDEX(Sheet1!myRange,,2)
. Он получает все строки (поскольку специальная строка не указана) из столбца 2
из myRange
.
Теперь мы можем вставить диаграмму (например, диаграмму ap ie).
Затем щелкните правой кнопкой мыши график и выберите Select Data
.
Сначала мы удаляем все существующие серии слева от записей легенды (серии), если таковые имеются. Затем мы добавляем новую серию. В значениях Серии: ставим формулу =Sheet1!myValues
, OK
.
Справа под горизонтальной (категорией) меткой оси нажимаем Edit
и вводим формулу =Sheet1!myCategories
, OK
.
Затем OK
для целых данных выбора -dialog.
Теперь, если мы изменим значение ячейки C1
на то, что INDIRECT
может интерпретировать как диапазон ячеек, тогда диаграмма тоже изменится.
На дайте также VBA
решение:
Давайте получим тот же лист, что и выше. Данные в A1:B8
и адрес диапазона в C1
.
Теперь создайте требуемый график. Это должен быть единственный объект диаграммы на этом листе.
Теперь поместите следующий код в модуль листа Sheet1
(щелкните правой кнопкой мыши вкладку листа и выберите View Code
):
Private Sub Worksheet_Change(ByVal Target As Range)
Dim oChartObject As ChartObject
Dim oChart As Chart
If Target.Row = 1 And Target.Column = 3 Then
On Error Resume Next
Set oChartObject = Me.ChartObjects(1)
Set oChart = oChartObject.Chart
oChart.SetSourceData Source:=Me.Range(Target.Value)
On Error GoTo 0
End If
End Sub
Этот код приводит к изменению исходных данных диаграммы при изменении значения C1
(строка 1, столбец 3).