Excel vba обновление сводной таблицы

Макрос для настройки полей и форматирования сводной таблицы

В данном примере представлены исходные коды и описания для макросов, которые позволяют настраивать и форматировать любые сводные таблицы.

Макрос для обновления сводной таблицы в Excel

Для примера воспользуемся тестовой сводной таблицей из предыдущего примера: Макрос для создания сводной таблицы в Excel.

Исходная сводная таблица.

Данной сводной таблице уже присвоено внутреннее имя «ТаблицаМ» (как описано в предыдущем примере, перейдите по ссылке выше картинки). Каждая сводная таблица состоит из 4-ох видов полей:

Карта полей.

  1. Поля ФИЛЬТРЫ.
  2. Поля СТРОКИ.
  3. Поля КОЛОННЫ.
  4. Поля ЗНАЧЕНИЯ.

Поля фильтров содержат ту часть таблицы исходных данных, которые необходимо проанализировать уже в сводной таблице. В примере следует проанализировать объем оборотов по отдельным магазинам фирмы. Как поле колон, так и поле строк определяет соответственно ту часть исходных данных, которую необходимо сортировать по строкам или по столбцам. Нет здесь определенного правила – все зависит от желаемого результата, который необходимо получить.

В данном примере определено:

  1. Столбец в исходных данных «Год» – находиться в поле фильтров.
  2. «Месяц» – определен как поле строк.
  3. «Магазины» – подчиненный к полю колон.
  4. «Оборот» – это поле значений, соответственно.

Далее рассмотрим, как изменять значения полей сводной таблицы с помощью макроса.

С помощью блока опций для второго конструктора With собираем расположение полей в сводной таблице. Текущие настройки полей при создании сводной таблицы определяются следующими строками кода макроса:

With ActiveSheet.PivotTables(«ТаблицаМ»)
.SmallGrid = True
.PivotFields(«Оборот»).Orientation = xlDataField
.PivotFields(«Год»).Orientation = xlPageField
.PivotFields(«Месяц»).Orientation = xlRowField
.PivotFields(«Магазины»).Orientation = xlColumnField
End With

Как видно из структуры данной части кода, каждое с полей сводной таблицы определяется отдельной строкой макроса. Ведь эта часть кода находиться внутри конструктора, который начинается с инструкции With. Если бы мы не использовали конструктор, тогда эти свойства и методы необходимо было бы каждый раз добавлять к объекту:

ActiveSheer.PivotTables(„ТаблицаМ”)

Примечание. «ТаблицаМ» – это внутреннее имя таблицы, которое было ей присвоено при создании для того, чтобы на нее было легче ссылаться в том числе и в коде макроса.

И к такому объекту должно относиться каждое поле настраивая порядок полей для сводной таблицы.

Заголовки столбцов, которые необходимо упорядочить определенным полем указываем (в скобках) как аргумент в методе PivotFields перед его свойством Orientation. В конце строки указываем параметром, какое поле было определено. Для этого к распоряжению язык VBA предоставляет нам выше упоминаемые 4 типа полей:

Поля Код VBA
ФИЛЬТРЫ xlPageField
СТРОКИ xlRowField
КОЛОННЫ xlColumnField
ЗНАЧЕНИЯ xlDataField

С помощью этих 4 строк VBA-кода макроса можно полностью изменить и по-другому настроить сводную таблицу. Разные настройки полей можно генерировать простейшими макросами, благодаря чему можно моментально перенастроить структуру любой сводной таблицы. Так даже намного удобнее, чем вручную перетягивать мышкой поля на уровне пользовательского интерфейса для настройки сводной таблицы в Excel.

Создадим макрос для изменения и настройки полей сводной таблицы. Откройте редактор макросов (ALT+F11) и создайте модуль если он еще не создан: «Insert»-«Module».

Введете код макроса, в результате которого будет выполнена автоматическая перенастройка структуры сводной таблицы с помощью изменения расположения полей для заголовков исходной таблицы «Магазины» и «Год»:

Sub ChangeTableM()
With ActiveSheet.PivotTables("ТаблицаМ")
.PivotFields("Магазины").Orientation = xlPageField
.PivotFields("Год").Orientation = xlColumnField
End With
End Sub

Код макроса.

Чтобы запустить макрос нажмите комбинацию горячих клавиш (ALT+F8) или выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«ChangeTableM» и нажмите на кнопку «Выполнить».

Новые настройки полей.

В результате сводная таблица автоматически изменит свою структуру как показано на рисунке.

Обратите внимание! В первой версии структуры сводной таблицы поле страницы служило для выбора года, относительного к соответственным показателям оборота магазинов фирмы. А теперь поле страниц служит для выбора соответственного магазина фирмы. В то же время года находятся в заголовках столбцов (поле КОЛОННЫ).



Форматирование сводной таблицы макросом

Созданная по умолчанию сводная таблица в большинстве случаев не соответствует желаемому уровню читабельности для пользователей. Как минимум нужно ей задать все необходимые форматы для отображения числовых значений. Следующий код макроса позволяет автоматически присвоить желаемый стиль для отображения чисел в денежном формате:

Sub FormatDeneg()
ActiveSheet.PivotTables("ТаблицаМ").PivotFields("Сумма по полю Оборот").NumberFormat = "# ##0 " & ChrW(8381)
End Sub

Снова нажмите комбинацию горячих клавиш (ALT+F8) или выберите: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«FormatDeneg» и нажмите «Выполнить».

Данный код необходимо записать в тот же самый модуль, в котором находятся коды других макросов.

В результате действия этого короткого и простого макроса все числовые значения в таблице будут преобразованы в денежный формат рублей (с разделителем тысяч и без копеек). Запустив макрос «FormatDeneg» сводная, таблица приобретет следующий вид:

Форматирование значений.

В коде макроса мы использовали свойство NumberFormat, которое играет главную роль в форматировании чисел. В параметрах свойства мы просто указываем тип формат для отображения значения. Разновидность типов можно взять из списка: «ГЛАВНАЯ»-«Ячейки»-«Формат»-«Формат ячеек» (CTRL+1).

Числовые форматы.

В появившемся окне на закладке «Число» выберите опцию «(все форматы)» из списка «Числовые форматы:». В правом поле «Тип:» можно подобрать свой желаемый параметр для свойства NumberFormat.

Обратите внимание! В конце строки параметра мы с помощью символа амперсанта добавляем непечатный символ, который возвращает функция ChrW(8381). Данная функция позволяет там вводить непечатные символы Unicode. А код 8381 в ее аргументе – это юникод непечатного символа рубля ₽

Подобными способами можно форматировать всю сводную таблицу используя другие сроки кода макроса. Просто нужно менять параметры для свойств (присваивать толщину и типы линий границ, изменять цвета фонов ячеек и т.п.).

 

Vladimir Chebykin

Пользователь

Сообщений: 1224
Регистрация: 15.01.2015

#1

20.07.2018 13:40:13

Добрый день! какой макрос использовать, чтобы сводные автоматом обновлялись при изменении данных?. Метод/свойство в следующем макросе не подходит в моем случае:

Код
Sub Worksheet_SelectionChange(ByVal Target As Range)
Sheets("Лист2").PivotTables("СводнаяТаблица1").PivotCache.Refresh
End Sub

потому что данный макрос размещается в модкле листа,а у меня в процессе работы лист с исходный таблицей полностью удаляется и заменяется другим, соответственно вместе с листом удаляется и макрос из примера выше. Думаю, что нужен макрос для размещения в модуле книги, который бы отслеживал изменения в таблицах и обновлял сводную. Подскажете, как можно решить проблему?

 

mrzv

Пользователь

Сообщений: 44
Регистрация: 27.07.2015

Я вас не пойму, если исходный лист из которого сделана сводная удаляется, то тогда откуда ей обновляться?

 

mrzv, при обновлении данных из другого файла копируется новый лист с новой таблицей. Названия листа и умной таблицы присваиваются те же, что были в «старом» удаленном листе, поэтому сводная без проблем «перекидывает» свой источник данных на новую таблицу. Надеюсь, понятно объяснил.. Все делается автоматом макросами.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#4

20.07.2018 15:15:51

Доброе время суток.
Владимир, так вроде ничего сложного

Код
Public Sub refreshPivots()
    Dim pCache As PivotCache
    For Each pCache In ActiveWorkbook.PivotCaches
        pCache.Refresh
    Next
End Sub

Изменено: Андрей VG20.07.2018 15:17:29
(Что-то я как в песьне — они всё путают и имя и названья… Но чтобы так… :( Приношу свои извинения)

 

Андрей VG, спасибо, но немного не то. Мне надо, чтобы автоматом обновлялось при изменении исходных данных. А тут получается, что макрос нужно выполнить принудительно (размещаю просто в модуль). При размещении макроса в модуле книги, обновления не происходит. Хотя может я что-то делаю не так — в VBA я только начинаю..

П.С. если потребуется пример, то смогу только в понедельник..хотя мне трудно представить пример, в котором лист с исходной таблицей заменяется новым листом

Изменено: Vladimir Chebykin20.07.2018 16:01:07

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#6

20.07.2018 16:13:48

Цитата
Vladimir Chebykin написал:
Мне надо, чтобы автоматом обновлялось при изменении исходных данных

ну, так и вызовите его после изменения.

 

смысл какой? Куда правильнее обновлять при переходе на лист со сводной таблицей. Или это не тот случай?

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Vladimir Chebykin

Пользователь

Сообщений: 1224
Регистрация: 15.01.2015

#8

23.07.2018 07:54:56

Дмитрий(The_Prist) Щербаков, спасибо за подсказку! Как это часто бывает, все оказалось намного проще — нужно было лишь по другому взглянуть на проблему, Worksheet_Activate решает задачу:

Код
Private Sub Worksheet_Activate()
Sheets("Лист1").PivotTables("Сводная таблица1").PivotCache.Refresh
End Sub
 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#9

23.07.2018 09:40:18

Цитата
Vladimir Chebykin написал:
Worksheet_Activate решает задачу

И каждый раз, нужно это или не нужно — обновлять сводную? А если обновление минуты 2 или больше?

 

Андрей VG, в моем случае — это около 1000 строк и 30 столбцов без формул, т.е. занимает доли секунды. просто Ваш код я не смог «прикрутить» , чтобы сводная автоматом обновлялась при изменении исходника ( может просто потому что я «не шарю» в макросах, о чем писал в сообщении #5) — только принудительно.

 

skais675

Пользователь

Сообщений: 2177
Регистрация: 03.06.2014

#11

23.07.2018 10:15:46

Цитата
Vladimir Chebykin написал:
mrzv , при обновлении данных из другого файла копируется новый лист с новой таблицей. Названия листа и умной таблицы присваиваются те же, что были в «старом» удаленном листе, поэтому сводная без проблем «перекидывает» свой источник данных на новую таблицу. Надеюсь, понятно объяснил.. Все делается автоматом макросами.

Так вот на этом этапе и нужно ее обновить теми же маросами.

Мой канал

 

Vladimir Chebykin

Пользователь

Сообщений: 1224
Регистрация: 15.01.2015

#12

23.07.2018 10:37:55

Цитата
skais675 написал:
Так вот на этом этапе и нужно ее обновить теми же маросами

Наверное, я не до конца выразил задачу. Таблица обновилась — ок, но в дальнейшем с ней продолжают работать, а именно: изменять комментарии. Вся фишка в том, что необходимо видеть изменяемые комментарии. Ладно, чтобы было яснее во вложении пример, который обещал в сообщении 5 (хотя задачу уже решил).

Прикрепленные файлы

  • Книга1.xlsx.xlsm (58.98 КБ)

 

skais675

Пользователь

Сообщений: 2177
Регистрация: 03.06.2014

Ну я бы
1. Либо бы не удалял лист вовсе, а просто обновлял бы в таблице данные, и тогда по событию все бы работало.
2. Либо вставлял бы макрос на свежевставленный лист.
3. В принципе и Ваш вариант решил задачу — тоже имеет место быть.

Изменено: skais67523.07.2018 11:12:11

 

Vladimir Chebykin

Пользователь

Сообщений: 1224
Регистрация: 15.01.2015

#14

23.07.2018 11:38:46

Цитата
skais675 написал:
2. Либо вставлял бы макрос на свежевставленный лист

возможно ли это сделать автоматом? например макрос из сообщения №1 автоматически вставлять в модуль нового листа?  

 

skais675

Пользователь

Сообщений: 2177
Регистрация: 03.06.2014

#15

23.07.2018 11:56:01

Здесь

Мой канал

  • Обновить сводную таблицу в VBA

Обновить сводную таблицу в VBA

Мы обычно создаем сводную таблицу, когда нам нужно создать какие-то графики или диаграммы, или нам нужно провести некоторый анализ над ней. Подготовив сводную таблицу, мы можем получить общее представление и представление о том, что на самом деле находится внутри данных. Это лучший способ найти способ получить данные. И каждый раз, когда мы вносим какие-либо изменения в данные, нам также необходимо обновлять сводную таблицу. Так что он будет заполнять обновленный счетчик данных. Обновление любой сводной таблицы очень просто, но что делать, если у нас есть 10сек сводных таблиц в одном файле Excel, который нам нужно обновить. Таким образом, вместо обновления всех сводных таблиц одну за другой, мы можем напрямую обновить все сводные таблицы за один раз с помощью VBA Refresh Pivot Table.

Как использовать Обновить сводную таблицу в Excel VBA?

Ниже приведены различные примеры использования Обновить сводную таблицу в Excel с использованием кода VBA.

Вы можете скачать этот шаблон Excel для сводной таблицы обновления VBA здесь — шаблон Excel для сводной таблицы обновления VBA

Сводная таблица обновления VBA — пример № 1

Для обновления сводной таблицы, во-первых, нам нужно создать сводную таблицу. Ниже у нас есть данные о позиции 1000 с, по которой мы будем создавать сводную таблицу.

На приведенном выше снимке экрана мы видим последнюю строку в 1001, и эти данные содержат информацию о покупателе и количество, проданное им.

Теперь перейдите на вкладку меню « Вставка » и выберите опцию « Сводная таблица» .

Мы получим окно Создать сводную таблицу. Оттуда сначала выберите диапазон таблицы, который мы хотим включить в сводную таблицу. Затем выберите любое место в текущем листе для сводной таблицы. Мы также можем выбрать новый рабочий лист.

После этого нажмите кнопку ОК.

Мы создадим сводную таблицу. Теперь перетащите необходимые поля в разные области, чтобы получить актуальную сводную таблицу. Здесь мы перетаскиваем имя клиента в ROWS, а количество в COLUMNS, как показано ниже.

Это завершает создание сводной таблицы. Но нам нужно обновить сводную таблицу после изменения чего-либо в Data, это можно сделать, просто обновив опцию из раскрывающегося списка правой кнопкой мыши, как показано ниже.

Но тот же процесс может быть автоматизирован и через VBA. Для этого нам понадобится модуль. Так,

Шаг 1: Перейдите на вкладку меню «Вставка» и выберите «Модуль» в раскрывающемся списке, как показано ниже.

Шаг 2: В недавно открытом модуле напишите подкатегорию VBA Pivot Refresh, или мы можем выбрать любое имя по нашему выбору.

Код:

 Sub Pivot_Refresh2 () End Sub 

Шаг 3. Сначала определите переменную как PivotCache, как показано ниже. PivotCache использует сводный кеш, а не данные, используемые для создания сводной таблицы.

Код:

 Sub Pivot_Refresh2 () Dim Table As PivotCache End Sub 

Шаг 4: Теперь мы будем использовать цикл For-Each . Так что откройте цикл For-Each, как показано ниже.

Код:

 Sub Pivot_Refresh2 () Dim Table As PivotCache для каждой следующей таблицы End Sub 

Шаг 5: Теперь внутри цикла For-End мы напишем условие, в котором мы выберем текущий открытый лист с таблицей Pivot с PivotCache .

Код:

 Sub Pivot_Refresh2 () Dim Table As PivotCache для каждой таблицы в ThisWorkbook.PivotCaches Следующая таблица End Sub 

Шаг 6: Теперь мы будем использовать команду Обновить, назначив ей определенную переменную Table .

Код:

 Sub Pivot_Refresh2 () Dim Table As PivotCache для каждой таблицы в таблице ThisWorkbook.PivotCaches. Обновить Следующая таблица End Sub 

Шаг 7: Это завершает код, теперь скомпилируйте код в файл ошибки, нажав функциональную клавишу F8. Теперь, чтобы проверить, работает ли написанный код, мы изменили количество Customer14 на 69 .

Шаг 8: Теперь запустите код. Мы увидим, что общий счет против Customer14 обновлен до 2183, который выделен желтым цветом.

Сводная таблица обновления VBA — пример № 2

Есть еще один способ обновить сводную таблицу через VBA. Прежде чем двигаться дальше, мы можем рассмотреть вопрос об изменении имени сводной таблицы или использовать имя по умолчанию. Давайте попробуем дать новое имя сводной таблице. Для этого выберите сводную таблицу и перейдите на вкладку меню « Анализ », как показано ниже.

В первом разделе Имени сводной таблицы мы видим имя по умолчанию как Сводная таблица1 .

Теперь мы изменим это имя. Попробуйте записать новое имя как Данные клиента, как показано ниже.

Шаг 1: После этого откройте новый модуль и запишите подкатегорию VBA Refresh, как показано ниже.

Код:

 Sub Pivot_Refresh3 () End Sub 

Шаг 2: Теперь определите переменную как сводную таблицу . Здесь, с помощью сводной таблицы, мы рассмотрим полные исходные данные.

Код:

 Sub Pivot_Refresh3 () Dim Table As PivotTable End Sub 

Шаг 3: Теперь используйте Set с определенной переменной и выберите лист, который открыт в данный момент.

Код:

 Sub Pivot_Refresh3 () Dim Table As PivotTable Set Table = ActiveSheet. End Sub 

Шаг 4: Выберите имя сводной таблицы, которую мы хотим обновить вместе с переменным типом данных, который мы использовали в качестве сводной таблицы .

Код:

 Sub Pivot_Refresh3 () Dim Table As PivotTable Set Table = ActiveSheet.PivotTables ("Данные клиента") End Sub 

Шаг 5: Наконец, используйте переменную с функцией RefreshTable для ее выполнения.

Код:

 Sub Pivot_Refresh3 () Dim Table As PivotTable Set Table = ActiveSheet.PivotTables ("Данные клиента") Table.RefreshTable End Sub 

Шаг 6: Давайте внесем еще некоторые изменения в данные, чтобы получить реальное представление о прикладном коде.

Мы изменили счет Customer2 как 56 . Теперь, если мы запустим код, в сводной таблице имени клиента, должны быть изменения в сумме количества для клиента2 .

Шаг 7: Теперь перейдите в окно VBA и скомпилируйте код. Если ошибки не найдены, запустите ее, нажав кнопку воспроизведения, которая находится под строкой меню, как показано ниже. Мы заметим, что сумма количества, проданного за Customer2, теперь увеличивается до 1724, внося изменения в исходную таблицу.

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

Плюсы VBA Refresh Pivot Table

  • Обновление сводной таблицы с помощью кода VBA занимает очень мало времени.
  • Это очень легко реализовать.

То, что нужно запомнить

  • Мы можем добавить несколько таблиц источников данных и автоматизировать их с помощью кода VBA.
  • Чтобы изменения произошли, держите окно VBA и лист Excel параллельно друг другу.
  • Лучше назвать каждую сводную таблицу, если вы имеете дело и работаете с несколькими источниками данных и сводными таблицами.
  • Код с именем сводной таблицы легко понять, отследить и найти.

Рекомендуемые статьи

Это руководство к сводной таблице обновлений VBA. Здесь мы обсудим, как использовать Excel VBA Refresh Pivot Table вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. VBA FileSystemObject (FSO)
  2. Функция подстроки Excel
  3. VBA Длина строки
  4. Excel ISNUMBER Formula

Хитрости »

21 Август 2016              61997 просмотров


Автообновляемая сводная таблица

Многие, кто работал со сводными таблицами наверняка знают, что при изменении значений в исходных данных(данные, на основании которых создана сводная) сама сводная таблица при этом не обновляется. Чтобы обновить надо проделать еще пару манипуляций:

    Выделить любую ячейку сводной таблицы→Правая кнопка мыши→Обновить(Refresh) или вкладка Данные(Data) →Обновить все(Refresh all) →Обновить(Refresh)

Однако, если в конец исходных данных добавить строку(или несколько), то с большой долей вероятности даже обновление сводной таблицы не поможет — добавленная строка не появится в сводной. И чтобы её увидеть необходимо будет изменить источник данных для сводной таблицы, включив новую строку в диапазон. Не очень удобно, не правда ли? Чтобы добиться расширения диапазона исходных данных автоматически вместе с добавлением туда данных, лучше позаботиться об этом до создания сводной таблицы.


Недоавтообновление
Почему «недо» — жать кнопку Обновить все же придется…Но не отчаивайтесь — читайте до конца и мы научимся обновлять все автоматом.

Для счастливых обладателей Excel 2007 и старше есть простой способ без лишних телодвижений. Это встроенный инструмент Таблица(Table). Его еще иначе называют «умная таблица» и я тоже буду применять этот термин, чтобы не было путаницы.

Умная таблица

— это специальный объект, который представляет собой правильную таблицу с заголовками, которая расширяется по мере добавления в неё данных. В ней много еще чего полезного, но нас интересует сейчас именно то, что она расширяется сама по мере добавления данных и что на её основе можно создать сводную таблицу. В нашем случае она будет играть роль динамического именованного диапазона(стандартный именованный диапазон не может быть источником данных для сводной таблицы, поэтому и приходится идти другими путями). Чтобы создать такую таблицу необходимо:

К выбранному диапазону автоматически будет применено форматирование как таблицы, используемое по умолчанию. На это можно не обращать внимания, т.к. для наших целей это по большому счету не важно.

    Если вдруг захочется и здесь навести красоту, то это тоже делается довольно легко:
    Выделяем любую ячейку в этой таблице-переходим на вкладку Работа с таблицами(Table tools)Конструктор(Desigh)Стили таблиц(Table styles). Можно выбрать один из предлагаемых там вариантов и применить. Если ни один из вариантов не подходит — создаем свой. Раскрываем список стилей и выбираем Создать стиль таблицы(New table style…)

А дальше все как привыкли:

  1. Выделить любую ячейку исходной таблицы(теперь уже «умной»)
  2. Вкладка Вставка(Insert) -группа Таблица(Table) -Сводная таблица(PivotTable)
  3. В диалоговом окне Создание сводной таблицы(Create PivotTable) в пункте Выбрать таблицу или диапазон(Select a table or range) в поле Таблица или диапазон(Range/Table) будет автоматически указан не адрес какого-то диапазона, а имя созданной умной таблицы:
    Создание сводной на основе умной таблицы
    Далее надо определить место размещения Сводной таблицы:

    • На новый лист (New Worksheet)
    • На существующий лист (Existing Worksheet)
  4. нажать OK

Готово. Теперь при добавлении строк в эту таблицу для их отображения в сводной достаточно будет лишь обновить сводную таблицу как привыкли. Правда, тут тоже есть нюанс — добавлять строки надо правильно. Можно вбить данные в любую ячейку первой пустой строки таблицы — таблица автоматом расшириться, добавив еще одну строку. Теперь туда можно скопировать нужные данные или добить вручную. Если надо вставить сразу несколько строк — в правом нижнем углу последней строки умной таблицы есть слегка выделяющийся уголочек, который надо ухватить мышью и растянуть на нужное кол-во строк/столбцов.
Если мы просто скопируем строки ниже таблицы, то она не расширится. Это надо учитывать.


Если необходимо

настроить на авторасширение уже созданную сводную

, то порядок почти такой же, только сводную таблицу создавать не надо. Преобразуем исходные данные в умную таблицу, переходим на лист со сводной таблицей. Выделяем любую ячейку в сводной таблице, переходим на динамическую вкладку Работа со сводными таблицами(PivotTable Tools)Параметры(Options) -группа кнопок Даныне(Data)Источник данных(Change data Source). В появившемся окне в поле Таблица или диапазон(Table/Range) указываем либо ссылку на всю умную таблицу, либо имя нашей умной таблицы(если знаете где его подсмотреть).

На что здесь следует обратить внимание:

если указывался диапазон, то если он указан верно — в поле вместо адреса ячеек будет отображено имя умной таблицы:
Изменить источник данных
Если же после указания видите именно диапазон — значит что-то указано неверно или таблица не является умной(возможно, форматирование от умной таблицы, но сама умная таблица была удалена).


Полное автообновление

Для полного счастья можно подключить работу макросов. Что я хочу? Я хочу, чтобы как только я изменил/добавил данные в исходные данные — сводная тут же обновилась. Для этого надо сделать следующее:

  1. убеждаемся, что макросы разрешены(Почему не работает макрос?, Что такое макрос и где его искать?)
  2. перейти на лист исходных данных(в моем случае лист так и называется — Исходные данные)
  3. жмем на ярлычке этого листа правой кнопкой мыши —Исходный текст(View code):
    Модуль листа
  4. вставляем туда следующий код:
    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. Сохраняем файл(это опционально :))

Все, теперь при любом изменении внутри исходных данных(будь это добавление/удаление строк или просто изменение значений внутри таблицы) сводная таблица обновиться без занудных действий вроде выделения сводной и жмахания кнопки Обновить.
Пара важных комментариев к коду:

  • Sheets(«Автообновляемая сводная») — здесь Автообновляемая сводная это имя листа, на котором расположена сводная таблица. Это очень важно. Если будет указано неверное имя листа — код выдаст ошибку и никакого обновления, конечно же, не произойдет
  • код сделан таким образом, что на листе исходных данных должна быть только одна умная таблица. Нет, их может быть несколько, но код будет ориентироваться исключительно на первую. И если вы плохо знакомы с принципами создания объектов — то лучше не рисковать. Хотя и здесь можно выйти из положения. Если вы знаете имя своей умной таблицы(его можно подсмотреть на вкладке Конструктор -группа Свойства), то можно изменить код так:
    вместо строки
    If Not Intersect(Target, Target.Parent.ListObjects(1).Range) Is Nothing Then
    записать такую
    If Not Intersect(Target, Target.Parent.ListObjects(«Таблица1»).Range) Is Nothing Then
    где Таблица1 — имя вашей умной таблицы, на основании которой создана сводная.
  • тот же нюанс с листом самой сводной — код ориентирован так, что обновляет только первую сводную на листе Автообновляемая сводная. Здесь так же можно заменить цифру 1 на имя сводной(например .PivotTables(«СводнаяТаблица1»).RefreshTable), либо же сделать обновление всех сводных. Для этого надо раскомментировать блок ‘для всех сводных на листе(убрать апострофы перед строками) и убрать строку с именем листа, чтобы получилось так:
    Private Sub Worksheet_Change(ByVal Target As Range)
        'проверяем - изменения внутри умной таблицы или нет
        If Not Intersect(Target, Target.Parent.ListObjects(1).Range) Is Nothing Then
            'если внутри таблицы, то обновляем все сводные на листе "Автообновляемая сводная"
            Dim pt As PivotTable
            For Each pt In Sheets("Автообновляемая сводная").PivotTables
                pt.RefreshTable
            Next
        End If
    End Sub

    но этот вариант удобен лишь в том случае, если на данных одной умной таблицы созданы различные сводные таблицы для отображения некоей динамики в различных проекциях.

  • P.S. Так же можно использовать и иной подход — вставить в модуль листа Автообновляемая сводная такой код:

    Private Sub Worksheet_Activate()
        Me.PivotTables(1).RefreshTable
    End Sub

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

    Скачать файл с автообновляемой сводной таблицей:

      Tips_PT_AutoRefreshPT.xlsm (46,5 KiB, 3 040 скачиваний)


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Содержание

  1. VBA Обновить сводную таблицу — Как использовать Обновить сводную таблицу в Excel VBA
  2. Обновить сводную таблицу в VBA
  3. Как использовать Обновить сводную таблицу в Excel VBA?
  4. Сводная таблица обновления VBA — пример № 1
  5. Сводная таблица обновления VBA — пример № 2
  6. Плюсы VBA Refresh Pivot Table
  7. То, что нужно запомнить
  8. Рекомендуемые статьи
  9. Макрос для настройки полей и форматирования сводной таблицы
  10. Макрос для обновления сводной таблицы в Excel
  11. Форматирование сводной таблицы макросом

VBA Обновить сводную таблицу — Как использовать Обновить сводную таблицу в Excel VBA

Обновить сводную таблицу в VBA

Мы обычно создаем сводную таблицу, когда нам нужно создать какие-то графики или диаграммы, или нам нужно провести некоторый анализ над ней. Подготовив сводную таблицу, мы можем получить общее представление и представление о том, что на самом деле находится внутри данных. Это лучший способ найти способ получить данные. И каждый раз, когда мы вносим какие-либо изменения в данные, нам также необходимо обновлять сводную таблицу. Так что он будет заполнять обновленный счетчик данных. Обновление любой сводной таблицы очень просто, но что делать, если у нас есть 10сек сводных таблиц в одном файле Excel, который нам нужно обновить. Таким образом, вместо обновления всех сводных таблиц одну за другой, мы можем напрямую обновить все сводные таблицы за один раз с помощью VBA Refresh Pivot Table.

Как использовать Обновить сводную таблицу в Excel VBA?

Ниже приведены различные примеры использования Обновить сводную таблицу в Excel с использованием кода VBA.

Вы можете скачать этот шаблон Excel для сводной таблицы обновления VBA здесь — шаблон Excel для сводной таблицы обновления VBA

Сводная таблица обновления VBA — пример № 1

Для обновления сводной таблицы, во-первых, нам нужно создать сводную таблицу. Ниже у нас есть данные о позиции 1000 с, по которой мы будем создавать сводную таблицу.

На приведенном выше снимке экрана мы видим последнюю строку в 1001, и эти данные содержат информацию о покупателе и количество, проданное им.

Теперь перейдите на вкладку меню « Вставка » и выберите опцию « Сводная таблица» .

Мы получим окно Создать сводную таблицу. Оттуда сначала выберите диапазон таблицы, который мы хотим включить в сводную таблицу. Затем выберите любое место в текущем листе для сводной таблицы. Мы также можем выбрать новый рабочий лист.

После этого нажмите кнопку ОК.

Мы создадим сводную таблицу. Теперь перетащите необходимые поля в разные области, чтобы получить актуальную сводную таблицу. Здесь мы перетаскиваем имя клиента в ROWS, а количество в COLUMNS, как показано ниже.

Это завершает создание сводной таблицы. Но нам нужно обновить сводную таблицу после изменения чего-либо в Data, это можно сделать, просто обновив опцию из раскрывающегося списка правой кнопкой мыши, как показано ниже.

Но тот же процесс может быть автоматизирован и через VBA. Для этого нам понадобится модуль. Так,

Шаг 1: Перейдите на вкладку меню «Вставка» и выберите «Модуль» в раскрывающемся списке, как показано ниже.

Шаг 2: В недавно открытом модуле напишите подкатегорию VBA Pivot Refresh, или мы можем выбрать любое имя по нашему выбору.

Код:

Шаг 3. Сначала определите переменную как PivotCache, как показано ниже. PivotCache использует сводный кеш, а не данные, используемые для создания сводной таблицы.

Код:

Шаг 4: Теперь мы будем использовать цикл For-Each . Так что откройте цикл For-Each, как показано ниже.

Код:

Шаг 5: Теперь внутри цикла For-End мы напишем условие, в котором мы выберем текущий открытый лист с таблицей Pivot с PivotCache .

Код:

Шаг 6: Теперь мы будем использовать команду Обновить, назначив ей определенную переменную Table .

Код:

Шаг 7: Это завершает код, теперь скомпилируйте код в файл ошибки, нажав функциональную клавишу F8. Теперь, чтобы проверить, работает ли написанный код, мы изменили количество Customer14 на 69 .

Шаг 8: Теперь запустите код. Мы увидим, что общий счет против Customer14 обновлен до 2183, который выделен желтым цветом.

Сводная таблица обновления VBA — пример № 2

Есть еще один способ обновить сводную таблицу через VBA. Прежде чем двигаться дальше, мы можем рассмотреть вопрос об изменении имени сводной таблицы или использовать имя по умолчанию. Давайте попробуем дать новое имя сводной таблице. Для этого выберите сводную таблицу и перейдите на вкладку меню « Анализ », как показано ниже.

В первом разделе Имени сводной таблицы мы видим имя по умолчанию как Сводная таблица1 .

Теперь мы изменим это имя. Попробуйте записать новое имя как Данные клиента, как показано ниже.

Шаг 1: После этого откройте новый модуль и запишите подкатегорию VBA Refresh, как показано ниже.

Код:

Шаг 2: Теперь определите переменную как сводную таблицу . Здесь, с помощью сводной таблицы, мы рассмотрим полные исходные данные.

Код:

Шаг 3: Теперь используйте Set с определенной переменной и выберите лист, который открыт в данный момент.

Код:

Шаг 4: Выберите имя сводной таблицы, которую мы хотим обновить вместе с переменным типом данных, который мы использовали в качестве сводной таблицы .

Код:

Шаг 5: Наконец, используйте переменную с функцией RefreshTable для ее выполнения.

Код:

Шаг 6: Давайте внесем еще некоторые изменения в данные, чтобы получить реальное представление о прикладном коде.

Мы изменили счет Customer2 как 56 . Теперь, если мы запустим код, в сводной таблице имени клиента, должны быть изменения в сумме количества для клиента2 .

Шаг 7: Теперь перейдите в окно VBA и скомпилируйте код. Если ошибки не найдены, запустите ее, нажав кнопку воспроизведения, которая находится под строкой меню, как показано ниже. Мы заметим, что сумма количества, проданного за Customer2, теперь увеличивается до 1724, внося изменения в исходную таблицу.

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

Плюсы VBA Refresh Pivot Table

  • Обновление сводной таблицы с помощью кода VBA занимает очень мало времени.
  • Это очень легко реализовать.

То, что нужно запомнить

  • Мы можем добавить несколько таблиц источников данных и автоматизировать их с помощью кода VBA.
  • Чтобы изменения произошли, держите окно VBA и лист Excel параллельно друг другу.
  • Лучше назвать каждую сводную таблицу, если вы имеете дело и работаете с несколькими источниками данных и сводными таблицами.
  • Код с именем сводной таблицы легко понять, отследить и найти.

Рекомендуемые статьи

Это руководство к сводной таблице обновлений VBA. Здесь мы обсудим, как использовать Excel VBA Refresh Pivot Table вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. VBA FileSystemObject (FSO)
  2. Функция подстроки Excel
  3. VBA Длина строки
  4. Excel ISNUMBER Formula

Источник

Макрос для настройки полей и форматирования сводной таблицы

В данном примере представлены исходные коды и описания для макросов, которые позволяют настраивать и форматировать любые сводные таблицы.

Макрос для обновления сводной таблицы в Excel

Для примера воспользуемся тестовой сводной таблицей из предыдущего примера: Макрос для создания сводной таблицы в Excel.

Данной сводной таблице уже присвоено внутреннее имя «ТаблицаМ» (как описано в предыдущем примере, перейдите по ссылке выше картинки). Каждая сводная таблица состоит из 4-ох видов полей:

  1. Поля ФИЛЬТРЫ.
  2. Поля СТРОКИ.
  3. Поля КОЛОННЫ.
  4. Поля ЗНАЧЕНИЯ.

Поля фильтров содержат ту часть таблицы исходных данных, которые необходимо проанализировать уже в сводной таблице. В примере следует проанализировать объем оборотов по отдельным магазинам фирмы. Как поле колон, так и поле строк определяет соответственно ту часть исходных данных, которую необходимо сортировать по строкам или по столбцам. Нет здесь определенного правила – все зависит от желаемого результата, который необходимо получить.

В данном примере определено:

  1. Столбец в исходных данных «Год» – находиться в поле фильтров.
  2. «Месяц» – определен как поле строк.
  3. «Магазины» – подчиненный к полю колон.
  4. «Оборот» – это поле значений, соответственно.

Далее рассмотрим, как изменять значения полей сводной таблицы с помощью макроса.

С помощью блока опций для второго конструктора With собираем расположение полей в сводной таблице. Текущие настройки полей при создании сводной таблицы определяются следующими строками кода макроса:

With ActiveSheet.PivotTables(«ТаблицаМ»)
.SmallGrid = True
.PivotFields(«Оборот»).Orientation = xlDataField
.PivotFields(«Год»).Orientation = xlPageField
.PivotFields(«Месяц»).Orientation = xlRowField
.PivotFields(«Магазины»).Orientation = xlColumnField
End With

Как видно из структуры данной части кода, каждое с полей сводной таблицы определяется отдельной строкой макроса. Ведь эта часть кода находиться внутри конструктора, который начинается с инструкции With. Если бы мы не использовали конструктор, тогда эти свойства и методы необходимо было бы каждый раз добавлять к объекту:

Примечание. «ТаблицаМ» – это внутреннее имя таблицы, которое было ей присвоено при создании для того, чтобы на нее было легче ссылаться в том числе и в коде макроса.

И к такому объекту должно относиться каждое поле настраивая порядок полей для сводной таблицы.

Заголовки столбцов, которые необходимо упорядочить определенным полем указываем (в скобках) как аргумент в методе PivotFields перед его свойством Orientation. В конце строки указываем параметром, какое поле было определено. Для этого к распоряжению язык VBA предоставляет нам выше упоминаемые 4 типа полей:

Поля Код VBA
ФИЛЬТРЫ xlPageField
СТРОКИ xlRowField
КОЛОННЫ xlColumnField
ЗНАЧЕНИЯ xlDataField

С помощью этих 4 строк VBA-кода макроса можно полностью изменить и по-другому настроить сводную таблицу. Разные настройки полей можно генерировать простейшими макросами, благодаря чему можно моментально перенастроить структуру любой сводной таблицы. Так даже намного удобнее, чем вручную перетягивать мышкой поля на уровне пользовательского интерфейса для настройки сводной таблицы в Excel.

Создадим макрос для изменения и настройки полей сводной таблицы. Откройте редактор макросов (ALT+F11) и создайте модуль если он еще не создан: «Insert»-«Module».

Введете код макроса, в результате которого будет выполнена автоматическая перенастройка структуры сводной таблицы с помощью изменения расположения полей для заголовков исходной таблицы «Магазины» и «Год»:

Sub ChangeTableM()
With ActiveSheet.PivotTables( «ТаблицаМ» )
.PivotFields( «Магазины» ).Orientation = xlPageField
.PivotFields( «Год» ).Orientation = xlColumnField
End With
End Sub

Чтобы запустить макрос нажмите комбинацию горячих клавиш (ALT+F8) или выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«ChangeTableM» и нажмите на кнопку «Выполнить».

В результате сводная таблица автоматически изменит свою структуру как показано на рисунке.

Обратите внимание! В первой версии структуры сводной таблицы поле страницы служило для выбора года, относительного к соответственным показателям оборота магазинов фирмы. А теперь поле страниц служит для выбора соответственного магазина фирмы. В то же время года находятся в заголовках столбцов (поле КОЛОННЫ).

Форматирование сводной таблицы макросом

Созданная по умолчанию сводная таблица в большинстве случаев не соответствует желаемому уровню читабельности для пользователей. Как минимум нужно ей задать все необходимые форматы для отображения числовых значений. Следующий код макроса позволяет автоматически присвоить желаемый стиль для отображения чисел в денежном формате:

Sub FormatDeneg()
ActiveSheet.PivotTables( «ТаблицаМ» ).PivotFields( «Сумма по полю Оборот» ).NumberFormat = «# ##0 » & ChrW(8381)
End Sub

Снова нажмите комбинацию горячих клавиш (ALT+F8) или выберите: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«FormatDeneg» и нажмите «Выполнить».

Данный код необходимо записать в тот же самый модуль, в котором находятся коды других макросов.

В результате действия этого короткого и простого макроса все числовые значения в таблице будут преобразованы в денежный формат рублей (с разделителем тысяч и без копеек). Запустив макрос «FormatDeneg» сводная, таблица приобретет следующий вид:

В коде макроса мы использовали свойство NumberFormat, которое играет главную роль в форматировании чисел. В параметрах свойства мы просто указываем тип формат для отображения значения. Разновидность типов можно взять из списка: «ГЛАВНАЯ»-«Ячейки»-«Формат»-«Формат ячеек» (CTRL+1).

В появившемся окне на закладке «Число» выберите опцию «(все форматы)» из списка «Числовые форматы:». В правом поле «Тип:» можно подобрать свой желаемый параметр для свойства NumberFormat.

Обратите внимание! В конце строки параметра мы с помощью символа амперсанта добавляем непечатный символ, который возвращает функция ChrW(8381). Данная функция позволяет там вводить непечатные символы Unicode. А код 8381 в ее аргументе – это юникод непечатного символа рубля ₽

Подобными способами можно форматировать всю сводную таблицу используя другие сроки кода макроса. Просто нужно менять параметры для свойств (присваивать толщину и типы линий границ, изменять цвета фонов ячеек и т.п.).

Источник

Понравилась статья? Поделить с друзьями:
  • Excel vba обновить запросы
  • Excel vba массивы присвоение значений
  • Excel vba обновить запрос
  • Excel vba обновить все подключения
  • Excel vba массивы данных