Диаграммы Excel - установка серий завершается динамически - PullRequest
7 голосов
/ 13 октября 2008

У меня есть электронная таблица с множеством графиков и один лист с множеством данных, подающих эти графики.

Я нанес данные на каждый график, используя

=Sheet1!$C5:$C$3000

Это в основном просто отображает значения от C5 до C3000 на графике.

Регулярно, хотя я просто хочу посмотреть на подмножество данных, т. Е. Я мог бы просто захотеть посмотреть на первые 1000 строк, например. В настоящее время для этого мне нужно изменить формулу в каждом из моих графиков, что требует времени.

Вы бы знали, как это упростить? В идеале, если бы я мог просто иметь ячейку на одном листе, с которой она считывает номер строки и отображает все графики от C5 до C, «номер строки» был бы лучшим.

Любая помощь будет высоко ценится.

Ответы [ 7 ]

6 голосов
/ 13 октября 2008

ОК, мне пришлось провести еще немного исследований, вот как это сделать, полностью в электронной таблице (без VBA):

Используя A1 в качестве конца желаемого диапазона, и диаграмма находится на том же листе, что и данные:

Назовите первую ячейку данных (C5) в качестве именованного диапазона, скажем, TESTRANGE.
Создал именованный диапазон MYDATA по следующей формуле:

= OFFSET (TESTRANGE, 0, 0, Sheet1! $ A $ 1, 1)

Теперь перейдите на вкладку СЕРИЯ диалогового окна ИСТОЧНИКИ ДАННЫХ диаграммы, и измените ваше утверждение VALUES на:

= Лист1! MYDATA

Теперь каждый раз, когда вы изменяете значение ячейки А1, он меняет график.

Спасибо Роберту Мирнсу за то, что он уловил недостатки в моем предыдущем ответе.

3 голосов
/ 14 октября 2008

Это может быть достигнуто в два этапа:

  • Создать динамический именованный диапазон
  • Добавьте некоторый код 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. Если производительность является проблемой, измените код на запуск только по запросу (то есть с помощью кнопки или меню).

1 голос
/ 13 октября 2008

+ 1 для названия решения.

Обратите внимание, что имена на самом деле не ссылаются на диапазоны, они ссылаются на формулы . Вот почему вы можете присвоить имени что-то вроде "= OFFSET (...)" или "= COUNT (...)". Вы можете создавать именованные константы, просто сделайте ссылку на имя что-то вроде "= 42".

Именованные формулы и формулы массивов - это две методики работы с рабочими листами, которые я снова и снова применяю к рабочим листам не совсем опытного пользователя.

1 голос
/ 13 октября 2008

Вы можете посмотреть на динамические диапазоны. Если вы используете функцию OFFSET, вы можете указать начальную ячейку и количество строк и столбцов для выбора. Этот сайт содержит полезную информацию о присвоении имени диапазону OFFSET.

1 голос
/ 13 октября 2008

Вы можете динамически устанавливать диапазон для диаграммы в Excel. Вы можете использовать что-то вроде следующего кода VBA, чтобы сделать это:

Private Sub Worksheet_Change(ByVal Target as Range)
    Select Case Target 
    Case Cells(14, 2)
        Sheet1.ChartObjects(1).Chart.SetSourceData Range("$C5:$C$" & Cells(14,2))
    ...
    End Select
End Sub

В этом случае ячейка, содержащая номер последней строки для включения, - это B14 (помните строку первой при обращении к объекту Cells). Вы также можете использовать переменную вместо ссылки на Cells, если вы хотите сделать это полностью в коде. (Это работает как в 2007, так и в 2003 году.) Вы можете назначить эту процедуру кнопке и щелкнуть ее, чтобы обновить диаграмму после обновления ячейки, содержащей последнюю строку.

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

Edit: И, как PConroy указывает в комментарии, вы можете поместить этот код в событие Change для этой таблицы, так что для запуска кода не требуется ни кнопка, ни комбинация клавиш. Вы также можете добавить код, чтобы он обновлял каждую диаграмму только при редактировании соответствующей ячейки.

Я обновил приведенный выше пример, чтобы отразить это.

0 голосов
/ 08 апреля 2018

Расширяя ответ @Robert Mearns , вот как использовать диапазоны динамических ячеек для графиков , используя только формулы Excel (VBA не требуется):

Создание динамического имени Range

Скажем, у вас есть 3 столбца, например:

A5 | Время | Данные1 | Data2 |

A6 | 00:00 | 123123 | 234234 |

...

A3000 | 16:54 | 678678 | 987987 |

Теперь диапазон ваших данных может меняться в зависимости от данных, которые у вас могут быть, например, у вас есть 20 строк данных, 3000 строк данных или даже 25000 строк данных. Вы хотите иметь график, который будет обновляться автоматически без необходимости переустанавливать диапазон ваших данных при каждом обновлении самих данных.

Вот как это сделать просто:

  1. Определите другую ячейку, в которой ее значение будет иметь количество занятых ячеек с данными, и поместите в нее формулу =COUNTIF(A:A,"<>"&""). Например, это будет в ячейке D1 .

  2. Перейдите на вкладку «Формулы» -> «Определить имя», чтобы определить диапазон имен.

  3. В окне «Новое имя»:

    я. Дайте вашему диапазону данных имя, например, DataRange .

    * * +1055 II. В поле «Относится к» установите формулу: =OFFSET(Sheet1!$A$1, 0, 0,Sheet1!$D$1,3),

    где:

    • Sheet1!$A$1 => Ссылка: это ссылка, из которой вы хотите основать смещение.

    • 0 => Rows: количество строк, вверх или вниз, к которым должна обращаться верхняя левая ячейка результатов.

    • 0 => Столбцы: это количество столбцов слева или справа, к которым должна обращаться верхняя левая ячейка результатов.

    • Sheet1!$D$1 => Высота: высота в количестве строк, в которой вы хотите получить результат.

    • 3 => Ширина: ширина в столбцах, для которой нужно получить результат.

  4. Добавьте график и в окне «Выбор источника данных» в диапазоне данных диаграммы вставьте формулу в том виде, в котором вы ее создали. Например: =Sheet1!DataRange

Минусы: Если вы напрямую используете именованный диапазон в качестве источника данных для диаграммы, Excel автоматически преобразует названный диапазон в фактический диапазон. Поэтому любые будущие изменения вашего именованного диапазона не будут обновлять вашу диаграмму.

Для этого вам нужно отредактировать график и каждый раз заново устанавливать диапазон на =Sheet1!DataRange. Возможно, это не очень удобно, но лучше, чем редактировать диапазон вручную ...

0 голосов
/ 18 августа 2009

Простой способ сделать это - просто скрыть строки / столбцы, которые вы не хотите включать - при переходе к графику автоматически исключаются скрытые строки / столбцы

...