Это может быть достигнуто в два этапа:
- Создать динамический именованный диапазон
- Добавьте некоторый код VBA для обновления источника данных диаграмм в именованном диапазоне
Создание динамического имени Range
Введите число строк в вашем диапазоне данных в ячейку на листе данных.
Создайте именованный диапазон на листе данных (Вставка - Имя - Определить) с именем MyRange , формула которого выглядит следующим образом:
=OFFSET(Sheet1!$A$1,0,0,Sheet1!$D$1,3)
Обновите формулу, чтобы она соответствовала вашему макету
- Sheet1! $ A $ 1 установите это значение в верхнем левом углу диапазона данных
- Sheet1! $ D $ 1 установить это в ячейку, содержащую количество строк
- 3 установите это значение в число столбцов
Проверка работоспособности указанного диапазона:
Выберите раскрывающиеся меню Правка - Перейти, введите MyRange в поле ссылки.
Ваша область данных для диаграммы должна быть выбрана.
Добавить код VBA
Открыть IDE 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 автоматически преобразует именованный диапазон в фактический диапазон. Поэтому любые будущие изменения вашего именованного диапазона не будут обновлять вашу диаграмму.
На производительность могут повлиять перечисленные выше подходы.
Функция OFFSET в названном диапазоне является «изменчивой», что означает, что она пересчитывается всякий раз, когда вычисляется любая ячейка в книге. Если производительность является проблемой, замените ее формулой INDEX .
=Sheet1!$A$1:INDEX(Sheet1!$1:$65536,Sheet1!$D$1,2)
Код срабатывает при каждом изменении данных на Листе 1. Если производительность является проблемой, измените код на запуск только по запросу (то есть с помощью кнопки или меню).