Многие, кто работал со сводными таблицами наверняка знают, что при изменении значений в исходных
данных(данные, на основании которых создана сводная) сама сводная таблица при этом не обновляется.
Чтобы обновить надо проделать еще пару манипуляций:
Однако, если в конец исходных данных добавить строку(или несколько), то с большой долей
вероятности даже обновление сводной таблицы не поможет - добавленная строка не появится в
сводной. И чтобы её увидеть необходимо будет изменить источник данных для сводной таблицы,
включив новую строку в диапазон. Не очень удобно, не правда ли? Чтобы добиться расширения
диапазона исходных данных автоматически вместе с добавлением туда данных, лучше позаботиться об
этом до создания сводной таблицы.
Недоавтообновление
Почему "недо" - жать кнопку Обновить все же придется...Но не отчаивайтесь - читайте до конца и мы
научимся обновлять все автоматом.
Для счастливых обладателей Excel 2007 и старше есть простой способ без лишних телодвижений. Это
встроенный инструмент Таблица(Table). Его еще иначе называют "умная таблица" и я тоже буду
применять этот термин, чтобы не было путаницы.
Умная таблица - это специальный объект, который представляет собой правильную таблицу с
заголовками, которая расширяется по мере добавления в неё данных. В ней много еще чего полезного,
но нас интересует сейчас именно то, что она расширяется сама по мере добавления данных и что на её
основе можно создать сводную таблицу. В нашем случае она будет играть роль динамического
именованного диапазона(стандартный именованный диапазон не может быть источником данных для
сводной таблицы, поэтому и приходится идти другими путями). Чтобы создать такую таблицу
необходимо:
выделить таблицу исходных данных для создания сводной таблицы -перейти на вкладку
Вставка(Insert) и выбрать Таблица(Table)
В появившемся окне согласиться с указанным диапазоном или выбрать свой. Галочку Таблица с
заголовками(My table has headers) при этом надо обязательно оставить включенной:
Готово. Теперь при добавлении строк в эту таблицу для их отображения в сводной достаточно будет
лишь обновить сводную таблицу как привыкли. Правда, тут тоже есть нюанс - добавлять строки надо
правильно. Можно вбить данные в любую ячейку первой пустой строки таблицы - таблица автоматом
расшириться, добавив еще одну строку. Теперь туда можно скопировать нужные данные или добить
вручную. Если надо вставить сразу несколько строк - в правом нижнем углу последней строки умной
таблицы есть слегка выделяющийся уголочек, который надо ухватить мышью и растянуть на нужное
кол-во строк/столбцов.
Если мы просто скопируем строки ниже таблицы, то она не расширится. Это надо учитывать.
Если необходимо настроить на авторасширение уже созданную сводную, то порядок почти такой же,
только сводную таблицу создавать не надо. Преобразуем исходные данные в умную таблицу,
переходим на лист со сводной таблицей. Выделяем любую ячейку в сводной таблице, переходим на
динамическую вкладку Работа со сводными таблицами(PivotTable Tools) -Параметры(Options) -
группа кнопок Даныне(Data) -Источник данных(Change data Source). В появившемся окне в поле
Таблица или диапазон(Table/Range) указываем либо ссылку на всю умную таблицу, либо имя нашей
умной таблицы(если знаете где его подсмотреть). На что здесь следует обратить внимание: если
указывался диапазон, то если он указан верно - в поле вместо адреса ячеек будет отображено имя умной
таблицы:
Если же после указания видите именно диапазон - значит что-то указано неверно или таблица не
является умной(возможно, форматирование от умной таблицы, но сама умная таблица была удалена).
Полное автообновление
Для полного счастья можно подключить работу макросов. Что я хочу? Я хочу, чтобы как только я
изменил/добавил данные в исходные данные - сводная тут же обновилась. Для этого надо сделать
следующее:
1. убеждаемся, что макросы разрешены(Почему не работает макрос?, Что такое макрос и где его
искать?)
2. перейти на лист исходных данных(в моем случае лист так и называется - Исходные данные)
3. жмем на ярлычке этого листа правой кнопкой мыши -Исходный текст(View code):
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'проверяем - изменения внутри умной таблицы или нет
If Not Intersect(Target, Target.Parent.ListObjects(1).Range) Is Nothing Then
'если внутри таблицы, то обновляем сводную таблицу на листе
"Автообновляемая сводная"
Sheets("Автообновляемая сводная").PivotTables(1).RefreshTable
'для всех сводных на листе
' Dim pt As PivotTable
' For Each pt In Sheets("Автообновляемая сводная").PivotTables
' pt.RefreshTable
' Next
End If
End Sub
5. Сохраняем файл(это опционально :))
Все, теперь при любом изменении внутри исходных данных(будь это добавление/удаление строк или
просто изменение значений внутри таблицы) сводная таблица обновиться без занудных действий вроде
выделения сводной и жмахания кнопки Обновить.
Пара важных комментариев к коду:
но этот вариант удобен лишь в том случае, если на данных одной умной таблицы созданы
различные сводные таблицы для отображения некоей динамики в различных проекциях.
P.S. Так же можно использовать и иной подход - вставить в модуль листа Автообновляемая
сводная такой код:
тогда сводная на листе будет обновляться лишь тогда, когда будет активирован лист со сводной.
Плюсы подобного подхода очевидны в случаях, если часто приходится менять исходные данные.
В первом коде сводная будет обновляться при каждом ручном изменении в исходных данных,
даже если после этого мы не переходили на лист сводной, а дальше стали делать изменения в
исходных данных.