Диапазон диаграммы на основе значения в ячейке - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно создать линейную диаграмму, которая выбирает диапазон данных на основе значения в ячейке. Например, в ячейке C1 я пишу A1: B4, это означает, что диаграмма представляет собой отображение данных в ячейках с A1 по B4. Если я просто изменю значение в ячейке C1 на A1: B9, я хочу, чтобы график отображал данные этого диапазона - вы получите точку. Это не должно быть слишком сложно, но я не правильно понимаю (и по какой-то причине в Интернете полно тех же примеров, которые не подходят для моего)

Я пытался использовать Named Range функция. Я все еще думаю, что это путь к go, но мне нужна помощь.

1 Ответ

1 голос
/ 07 апреля 2020

Для этого не нужно VBA.

Давайте начнем иметь следующую таблицу с именем Sheet1:

enter image description here

Теперь нам нужно три именованных диапазона. Один для всего диапазона, который мы получаем косвенной формой C1, один для категорий, который является левым столбцом всего диапазона, и один для значений, который является правым столбцом всего диапазона.

Так в менеджер имен мы создаем следующие именованные диапазоны:

enter image description here

Обратите внимание, что все именованные диапазоны находятся в области действия листа 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...