Найти тему

📌 VBA Excel: Как автоматически обновить источник данных для сводной таблицы (пример решения)

Оглавление

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

Однако, при работе с данными из различных источников возникает необходимость в постоянном обновлении источника данных, что может быть раздражающим моментом 🤔.

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

Для удобства поиска нужного материала у нас на канале есть удобный рубрикатор, а все видео предыдущих уроков также доступны на youtube (ссылка внизу поста и в описании канала)
Для удобства поиска нужного материала у нас на канале есть удобный рубрикатор, а все видео предыдущих уроков также доступны на youtube (ссылка внизу поста и в описании канала)
Как автоматически обновить источник данных для сводной таблицы
Как автоматически обновить источник данных для сводной таблицы

📢 Файл с примером размещен в конце статьи 🔽

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

▶️ Пример исходных данных

В качестве источника исходных данных рассмотрим 3 (три) таблицы расположенные на разных листах, каждой из которых, задано соответствующее имя:

Пример исходных данных
Пример исходных данных

На основании одного из источников создаем сводную таблицу:

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

Также, для целей данного примера размещаем элемент управления ActiveX ComboBox - поле со списком:

Элемент управления ActiveX ComboBox -  поле со списком
Элемент управления ActiveX ComboBox - поле со списком

📝 Примечание автора: Посредством данного элемента управления будем обновлять источник данных для сводной таблицы.

А также, определим именованные ячейки и диапазоны:

Именованные диапазоны
Именованные диапазоны

▶️ ComboBox: как установить диапазон данных и связь с ячейкой

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

🔘 Способ 1: Указать диапазон и связь с ячейкой в свойствах

Установить диапазон данных для элемента управления и задать связь с ячейкой
Установить диапазон данных для элемента управления и задать связь с ячейкой

🔘 Способ 2. Использовать метод Worksheet.Activate или событие листа

Пример основного макроса:

Представленный макрос предназначен для заполнения элемента управления данными из именованного диапазона
Представленный макрос предназначен для заполнения элемента управления данными из именованного диапазона

Источник данных для ComboBox1 представляет собой именованный диапазон.

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

🔔 Автоматизировать работу макроса можно несколькими способами:

Рассмотрим два основных:

Вариант 1. Метод Worksheet.Activate

- позволяет активировать макрос при активации конкретного листа.

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

Например,

Метод Worksheet_Activate: заполняет элемент управления данными из именованного диапазона "Магазин".
Метод Worksheet_Activate: заполняет элемент управления данными из именованного диапазона "Магазин".

В результате, при активации указанного листа элемент управления будет заполнен данными из именованного диапазона:

Пример 1: заполнение выпадающего списка
Пример 1: заполнение выпадающего списка

Вариант 2. Событие Worksheet.SelectionChange

- запускает макрос при изменении выделенной области на листе:

Событие Worksheet_SelectionChange
Событие Worksheet_SelectionChange

➡️ В данном случае, макрос выполняется только при клике на определенную ячейку. Далее, элемент управления заполняется данными из именованного диапазона:

Пример 2: заполнение выпадающего списка. При клике на ячейку "B2", ComboBox1 будет автоматически заполнен данными из диапазона "Магазин"
Пример 2: заполнение выпадающего списка. При клике на ячейку "B2", ComboBox1 будет автоматически заполнен данными из диапазона "Магазин"

Чтобы установить связь с ячейкой применим макрос:

Макрос для установления связи между выбранным значением в ComboBox1 на листе "Лист1" и именованной ячейкой "names" в книге Excel
Макрос для установления связи между выбранным значением в ComboBox1 на листе "Лист1" и именованной ячейкой "names" в книге Excel

Выбранное значение помещается в именованную ячейку "names" с помощью строки кода: ThisWorkbook.Names("names").RefersToRange.Value = selectedValue

🔔 Макрос назначим на событие элемента управления ComboBox1_Change:

Событие ComboBox.Change
Событие ComboBox.Change

➡️ Таким образом, при выполнении макроса выбранное значение из ComboBox1 будет записано в указанную именованную ячейку, обеспечивая связь между элементом управления ComboBox и указанной ячейкой:

Пример связи между элементом управления ComboBox и указанной ячейкой
Пример связи между элементом управления ComboBox и указанной ячейкой

▶️ Как автоматически обновить источник данных для сводной таблицы

Пример макроса:

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

Краткое описание: 
- устанавливаем ссылку на лист и определяем переменную, которая содержит значение из ячейки "names". Данные из этой ячейки будут использоваться в качестве источника данных для сводной таблицы.
- с помощью метода "ChangePivotCache", обновляем источник данных сводной таблицы. Для этого создается новый сводный кэш с помощью метода "PivotCaches.Create", указывается тип источника данных (xlDatabase) и указывается новый источник данных для сводной таблицы.

Примечание автора: чтобы избежать возможных сбоев при обновлении сводной таблицы добавлена обработка возможных ошибок с помощью "On Error Resume Next"
Данный макрос обновляет источник данных для сводной таблицы на основе значения, содержащегося в указанной ячейке Краткое описание: - устанавливаем ссылку на лист и определяем переменную, которая содержит значение из ячейки "names". Данные из этой ячейки будут использоваться в качестве источника данных для сводной таблицы. - с помощью метода "ChangePivotCache", обновляем источник данных сводной таблицы. Для этого создается новый сводный кэш с помощью метода "PivotCaches.Create", указывается тип источника данных (xlDatabase) и указывается новый источник данных для сводной таблицы. Примечание автора: чтобы избежать возможных сбоев при обновлении сводной таблицы добавлена обработка возможных ошибок с помощью "On Error Resume Next"

🔔 Чтобы обеспечить автоматическое обновление источника данных для сводной таблицы на основе значения, содержащегося в указанной ячейке добавим макрос на событие элемента управления ComboBox1_Change:

Событие элемента управления ComboBox1_Change
Событие элемента управления ComboBox1_Change

➡️ Теперь, при каждом изменении значения в ComboBox1 сначала вызывается процедура, которая устанавливает выбранное значение в именованную ячейку. Затем, процедура, которая обновляет источник данных сводной таблицы:

Как автоматически обновить источник данных для сводной таблицы
Как автоматически обновить источник данных для сводной таблицы

🔷 Подводя итог ...

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

Подписывайтесь на канал, чтобы не пропустить новые уроки и полезные фишки Excel
Подписывайтесь на канал, чтобы не пропустить новые уроки и полезные фишки Excel

🔵 Ознакомиться с другими приемами VBA Excel вы можете в наших предыдущих обзорах 🔽

Быстрый поиск решения. Путеводитель Excel - Google Диск
Сводные таблицы | Excel на ИЗИ: ✅ Приемы эффективной работы в Microsoft Excel | Дзен
Примеры макросов VBA Excel | Excel на ИЗИ: ✅ Приемы эффективной работы в Microsoft Excel | Дзен

🙌 Оставайся с нами на связи и узнавай больше о других методах и приемах работы в Excel:

Excel на ИЗИ — полная коллекция видео на RUTUBE
It's Moskovskaya_Excel на ИЗИ - YouTube
Следите за новостями, чтобы узнать больше о VBA и Excel, в частности
Следите за новостями, чтобы узнать больше о VBA и Excel, в частности
Excel на ИЗИ

СКАЧАТЬ ПРИМЕР 🔽

Как обновить источник данных для сводной таблицы .xlsm