Этого можно достичь в два этапа:
- Создать динамический именованный диапазон
- Добавьте код VBA, чтобы обновить источник данных диаграмм до именованного диапазона.
Создайте динамический именованный диапазон
Введите количество строк в вашем диапазоне данных в ячейку на листе данных.
Создайте в своем листе данных именованный диапазон (Вставка – Имя – Определить) с именем MyRange и формулой, подобной этой:
=OFFSET(Sheet1!$A$1,0,0,Sheet1!$D$1,3)
Обновите формулу, чтобы она соответствовала вашему макету
- Sheet1!$A$1 установите его в верхнюю левую часть диапазона данных.
- Sheet1!$D$1 установите это значение в ячейку, содержащую количество строк
- 3 установите это значение равным количеству столбцов
Проверьте, что именованный диапазон работает:
Выберите раскрывающиеся меню «Правка» — «Перейти», введите MyRange в поле ссылки. Ваша область данных для диаграммы должна быть выбрана.
Добавьте немного кода VBA
Откройте интегрированную среду разработки VBA (Alt-F11).
Выберите Sheet1 в окне VBAProject и вставьте этот код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$1" Then Exit Sub
'Change $D$1 to the cell where you have entered the number of rows
'When the sheet changes, code checks to see if the cell $D$1 has changed
ThisWorkbook.Sheets("Sheet1").ChartObjects(1).Chart.SetSourceData _
Source:=ThisWorkbook.Sheets("Sheet1").Range("MyRange")
' ThisWorkbook.Sheets("Chart1").SetSourceData _
Source:=ThisWorkbook.Sheets("Sheet1").Range("MyRange")
'The first line of code assumes that chart is embedded into Sheet1
'The second line assumes that the chart is in its own chart sheet
'Uncomment and change as required
'Add more code here to update all the other charts
End Sub
На что обратить внимание
Не используйте именованный диапазон напрямую в качестве источника данных для диаграммы. Если вы введете именованный диапазон «MyRange» в качестве исходных данных — диапазон данных для диаграммы, Excel автоматически преобразует именованный диапазон в фактический диапазон. Таким образом, любые будущие изменения в вашем именованном диапазоне не будут обновлять вашу диаграмму.
Перечисленные выше подходы могут повлиять на производительность.
Функция СМЕЩЕНИЕ в именованном диапазоне является "изменчивой", что означает, что она пересчитывает каждый раз, когда вычисляется любая ячейка в рабочей книге. Если производительность является проблемой, замените ее формулой ИНДЕКС.
=Sheet1!$A$1:INDEX(Sheet1!$1:$65536,Sheet1!$D$1,2)
Код срабатывает каждый раз, когда данные изменяются на Sheet1. Если производительность является проблемой, измените код, чтобы он запускался только по запросу (например, через кнопку или меню).
person
Robert Mearns
schedule
14.10.2008