Допустим у нас имеется вот такая база данных по продажам, из которой нужно сделать отчёт:
Вы создали небольшую сводную таблицу (Вставка – Сводная таблица):
Но вашему начальнику не нравится внешний вид отчёта, и он хочет видеть что-то похожее на это:
То есть мы имеем несколько ощутимых трудностей:
1. Исходный внешний вид сводной таблицы не подходит - дизайн отчёта должен соответствовать корпоративным стандартам (цвета, логотипы, спарклайны, стрелки и т.д.). "Дорабатывать напильником" дизайн сводной - долгий и мучительный процесс. И не факт, что красота не слетит после пересчёта и обновления.
2. Из всей сводной для отчёта вам нужны не все данные, а только конкретные модели Ford по Питеру - придётся руками фильтровать.
3. Стандартные итоги в сводной нам не подходят, т.к. нужны суммы по выручке в зелёных ячейках, но среднее по месяцу в итогах - сводная так не умеет.
4. Полученные в сводной результаты - ещё не конец, нам необходимо произвести с ними какие-то дополнительные вычисления: пересчитать выручку в тысячах, добавить прогноз на апрель, сравнить этот год с прошлым. Многое из перечисленного в сводных или невозможно в принципе, или делается весьма мучительно и долго с помощью вычисляемых полей и объектов.
5. Нужно построить по результатам хитрую диаграмму (обычные сводные диаграммы имеют много ограничений).
Таким образом, перед нами стоит задача вытащить данные из сводной таблицы в другую таблицу - нужной нам конструкции, с дополнительными формулами и корпоративным дизайном. Сделать это можно разными способами.
1 способ. Прямая ссылка на ячейку в сводной
Это, что называется, решение проблемы «в лоб». Сделаем на отдельном листе заготовку отчёта:
Теперь в ячейку D7 можно вручную прописать ссылку:
=Лист1!B8
Где Лист1 – имя листа со сводной таблицей, а B8 – нужная нам ячейка в сводной с данными по продажам Ford Fiesta за январь.
При внешней простоте и очевидности у этого способа есть две проблемы:
1. Если сортировка моделей и дат в нашем красивом «отчёте для шефа» отличается от сводной, то скопировать созданную ссылку не получится и придётся делать их для каждой модели автомобиля персонально. А если нужно извлечь много данных, то придётся делать много ссылок вручную.
2. Завтра, после обновления, структура сводной таблицы может измениться - например, Fiesta может оказаться уже не третьей, а седьмой строкой, Focus переехать во вторую и т.д. И тогда все ссылки придётся переделывать.
2 способ. Функция ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ
Изящным решением всех этих проблем может стать функция ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ (GETPIVOTDATA), которая умеет извлекать нужные нам данные из сводной, чтобы использовать их в других таблицах или расчетах.
Чтобы её использовать, убедитесь, что при выделении любой ячейки сводной таблицы на вкладке Анализ (Analysis) или Параметры (Options) в выпадающем списке Параметры (Options) включена галочка Создать GetPivotData:
Теперь выделите первую ячейку зелёного диапазона, введите знак "равно" и щёлкните по ячейке в сводной, которая содержит нужные данные, т.е. по B8, где лежит выручка Fiesta за январь. Вместо привычной ссылки Excel вставит функцию ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ:
=ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ
("Выручка";'Сводная для отчета'!$A$4;
"Наименование";$C7;"Дата";1)
Давайте разберём её подробно:
1. Первый её аргумент ("Выручка") – это имя извлекаемого поля.
2. Второй (Лист1!$A$4) - это адрес первой ячейки сводной таблицы, откуда мы берём данные. Этот параметр нужен, т.к. на листе может быть несколько сводных и Excel должен понимать, из какой именно нужно вытащить число.
3. Все остальные аргументы начиная с третьего – это попарно название поля и его значение, т.е. в нашем случае это имя модели (Наименование="Fiesta") и временной период (Дата=1). Поскольку в сводной была применена группировка дат по месяцам, то в функции ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ мы получили не имя месяца, а его номер. Если бы в исходной базе данных был столбец не с датой, а с названием месяца, то группировка была бы не нужна и вместо единички был бы просто "январь".
У этой функции есть несколько серьёзных преимуществ перед обычной ссылкой на B8, которая приводила бы, на первый взгляд, к тому же результату. Главный плюс в том, что если завтра после обновления в сводной таблице изменится количество строк/столбцов или Ford Fiesta станет не третьей, а пятой строкой, то нам об этом волноваться уже не придётся – функция корректно извлечёт нужное нам значение. Достаточно только обновить сводную правой кнопкой мыши – и наша красивая форма отчёта «для шефа» пересчитается автоматически.
Далее, замените в формуле "Fiesta" на $С7 (т.е. на ячейку с названием модели), а единичку на D$5 (т.е. ячейку с номером месяца) и допишите в конце формулы деление на 1000, т.к. нам нужно отобразить данные в тысячах. Затем нажмите на Enter и протяните формулу на оставшиеся зелёные ячейки.
=ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ
("Выручка";'Сводная для отчета'!$A$4;"Наименование";
$C7;"Дата";D$5)/1000
Функция извлечёт из сводной нужные нам данные, заполнив нашу корпоративную форму отчёта.
Теперь с данными в диапазоне D7:F10 можно работать как с обычными формулами, а не как со сводной таблицей с её жёсткими ограничениями. Дальше можно спокойно считать любые итоги, динамику, прогнозы, строить любую диаграмму и т.д. Как украсить документ можно посмотреть здесь Минидиаграммы в ячейках
Формула для прогноза: =ПРЕДСКАЗ($G$5;D7:F7;$D$5:$F$5)
=FORECAST($G$5;D7:F7;$D$5:$F$5)
Формула для среднего значения: =СРЗНАЧ(D7:D10)
AVERAGE(D7:D10)
Формула для динамики: =D13/D14-1
Ссылка на файл в комментариях. Желаю всем без проблем сдать отчёты)) Кто знает способы лучше, можете поделиться опытом в комментариях.