Сборник 101 готовый макрос в excel

Как обновить сводную таблицу в excel (вручную + автообновление с помощью vba)

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

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

Вот шаги, чтобы обновить сводную таблицу:

  • Щелкните правой кнопкой мыши любую ячейку в сводной таблице.
  • Выберите Обновить.

Это мгновенно обновит сводную таблицу.

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

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

Примеры создания таблиц

Задание для примеров

Набор данных для примеров создания таблиц

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

  • в табличной части 5 граф: № п/п, Наименование, Количество, Цена и Сумма;
  • сколько наименований добавил пользователь неизвестно.

Нам необходимо:

  • определить количество строк;
  • добавить строку заголовков;
  • отобразить сетку (границы ячеек);
  • добавить строку итогов.

Таблицу будем оформлять двумя способами: путем создания умной и пользовательской таблиц.

Пример 1 — умная таблица

Упаковываем набор данных из задания в умную таблицу:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Subtest1()

‘Объявляем переменную для присвоения ей количества строк

DimaAsLong

‘Определяем количество строк

a=Cells(1,1).CurrentRegion.Rows.Count

‘Создаем умную таблицу с добавлением строки заголовков

ActiveSheet.ListObjects.Add(xlSrcRange,Range(Cells(1,1),Cells(a,5)),,xlNo).Name_

=»ТоварныйЧек1″

‘Изменяем названия граф

Cells(1,1)=»№ п/п»

Cells(1,2)=»Наименование»

Cells(1,3)=»Количество»

Cells(1,4)=»Цена»

Cells(1,5)=»Сумма»

‘Добавляем строку итогов

ActiveSheet.ListObjects(«ТоварныйЧек1»).ShowTotals=True

‘Стиль оставляем по умолчанию

EndSub

Результат выполнения кода Примера 1 получится такой:

Умная таблица из заданного набора данных

Пример 2 — «обычная» таблица

Упаковываем набор данных из задания в пользовательскую таблицу:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

Subtest2()

‘Объявляем переменную для присвоения ей количества строк

DimaAsLong

‘Определяем количество строк

a=Cells(1,1).CurrentRegion.Rows.Count

‘Добавляем строку заголовков

Cells(1,1).EntireRow.Insert

‘Указываем названия граф

Cells(1,1)=»№ п/п»

Cells(1,2)=»Наименование»

Cells(1,3)=»Количество»

Cells(1,4)=»Цена»

Cells(1,5)=»Сумма»

‘Добавляем сетку

Range(Cells(1,1),Cells(a+1,5)).Borders.LineStyle=True

‘Добавляем строку итогов

Cells(a+2,4)=»Итого:»

WithCells(a+2,5)

.FormulaR1C1=»=SUM(RC:RC)»

.Borders.LineStyle=True

.Font.Bold=True

EndWith

‘Выделяем заголовки жирным шрифтом и
‘применяем автоподстройку ширины столбцов

WithRange(Cells(1,1),Cells(1,5))

.Font.Bold=True

.EntireColumn.AutoFit

EndWith

EndSub

Результат выполнения кода Примера 2 получится такой:

Пользовательская таблица из заданного набора данных

Если решите поэкспериментировать с моим кодом, добавьте любые данные в пять колонок на активном листе Excel, количество строк может быть любым, в пятой графе должны быть числа.

О работе с умной таблицей (обращение к ячейкам, строкам и столбцам; добавление и удаление строк и столбцов) рассказано в статье VBA Excel. Работа с умной таблицей

Что такое сводная таблица

Сводная таблица в Excel (или pivit table, или “пивотная таблица”) — это особым образом организованная и структурированная таблица, которая выводит данные в нужном пользователю разрезе и производит необходимые вычисления без использования формул.

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

Предположим, нужна информация о сумме выручки в разрезе категории товара. Или по месяцам. Конечно, можно взять все категории товара и функцией СУММЕСЛИМН вытянуть нужные данные, но это займет намного больше времени. К тому же, если у вас завтра появится новая категория, ее нужно будет вручную добавить в таблицу (не забыть об этом, как минимум). Если же построить сводную таблицу в excel, они это сделает это за вас.

Как записать макрос

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

  • вручную;
  • автоматически.

Для того чтобы создать макрос автоматически, достаточно записать определенный порядок действий через Excel. При этом их необходимо выполнять в данный момент. Когда запись будет окончена, ее можно будет применить к другим таблицам, нажав на воспроизведение. Главное преимущество данного способа – нет необходимости учить код, чтобы применять его на практике. Однако такой алгоритм не будет обладать какой-либо гибкостью, его можно будет применять только в определенных ситуациях. Процесс автоматической записи макросов:

  1. Изначально необходимой зайти “Центр управления безопасностью” через главное меню программы.
  2. Зайти во вкладку “Параметры макросов”.
  3. Активировать команду “Включить все макросы”.

Активация макросов в исходных настройках Excel

  1. Перейти на вкладку “Разработчик”, которая находится на основной панели инструментов.
  2. Нажать на кнопку “Запись макроса” (она находится в панели инструментов под названием “Код”).

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

Создание сводных таблиц макросом

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

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

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

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

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

В данном примере создание сводной таблицы VBA-макросом будет достаточно простым. Простота решения будет достигнута за счет симуляции использования подобных параметров и действий, которые предоставляет к распоряжению мастер сводных таблиц в Excel. Используя экземпляр объекта PivotCaches запишем настройки своей сводной таблицы присвоив ей определенное имя. Это позволит потом непосредственно ссылаться на сводную таблицу в любой части кода. Для создания сводной таблицы используя макрос будем использовать метод PivotTableWizard. На этом же шаге будем использовать возможности объекта PivotFields, в котором определим структуру сводной таблицы с учетом исходных данных источника.

Написание кода макросов в Excel всегда начинается с открытия VBA-редактора (ALT+F11): «РАЗРАБОТЧИК»-«Код»-«Visual Basic».

Затем создадим модуль где будет храниться исходный код. Для этого выберите инструмент в редакторе VBA: «Insert»-«Module». В появившемся окне модуля введите следующий VBA-код макроса:

Теперь достаточно лишь запустить макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«CreateTableM»-«Выполнить»:

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

Работа с таблицами

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

Примеры ключевых функций, которые будут полезны при работы с таблицами, приведены ниже.

Работа с таблицей через название привязки

 'переменная для работы с конкретной таблицей
Set Table = Application.ActiveDocument.Bookmarks("НазваниеПривязки").Range.Tables(1)

countColumn = Table.Columns.Count 'количество столбцов таблицы

countRow = Table.Rows.Count 'количество строк таблицы

СellText  = Table.Cell(2,1).Range.Text 'значение ячейки во 2й строке 1го столбца
 

Работа с таблицей через её номер в документе

сountTables = ActiveDocument.Tables.Count 'количество таблиц в документе

Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=5, Name:="" 'перейти к таблице номер 5

countColumn  = Selection.Tables(1).Columns.Count 'количество столбцов таблицы

countRow = Selection.Tables(1).Rows.Count 'количество строк таблицы

СellText  = Selection.Tables(1).Cell(2,1).Range.Text 'значение ячейки во 2й строке 1го столбца
 

При работе с таблицами следует помнить ряд моментов:

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

On Error Resume Next ' игнорирование <error 5991> - ячейки таблицы имеют вертикальное объединение
 

При получении текста таблицы следует помнить, что полученное значение ячейки так же содержит в себе 2 служебных символа. Для обработки данных ячейки без этих служебных символов следует произвести «очистку» значения. Например:

СellText = Selection.Tables(1).Cell(3,2).Range.Text 'текст ячейки со служебными символами

СellText = Left$(СellText, (Len(CellText) - 2)) 'убираем 2 последних символа ячейки - чистый текст
 

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

Работа с копией отчета, содержащей макрос

При копировании отчета названия всех привязок изменяются.

Рисунок 3. Названия привязок в исходном отчете

Рисунок 4. Названия привязок в копии отчета

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

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

Пример проверки наличия привязки типа «Список». В документе это закладки.

Определяем название привязки типа «Список», которая представляет нужную таблицу (см. Руководство пользователя → ).

BookmarkName = "Изменения_процесса_e1ded8b0" 'название привязки

        'Проверка на корректность названия привязки

        Dim BookmarkIs As Boolean 'сначала считаем, что нужной закладки нет
        Dim Bkm As Bookmark 'переменная типа Закладка

        For Each Bkm InActiveDocument.Bookmarks 'перебираем все закладки в документе

            IfBkm.Name = BookmarkName Then 'если нашли закладку с нашим именем

                BookmarkIs = True 'отмечаем, что закладка есть
                'получаем таблицу по названию привязки 
                Set SettableStatus = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1)

            End If

        Next

If BookmarkIs Then 'если в документе закладка есть
    
   'производим необходимые действия c таблицей

End If

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

Пример проверки наличия привязки типа Объект

Определяем название привязки типа «Объект», которая представляет нужное поле в отчёте (см. статью Руководство пользователя → ).

VarName = "Статус_процесса_c9a10e8d" 'название привязки

      'Проверка наличия указанной привязки в документе
        Dim VarIs As Boolean 'сначала считаем что привязки нет

        'перебираем все переменные документа
        For Each aVar In ActiveDocument.Variables

            If aVar.Name = VarName Then 'если среди них есть с нашим именем

                VarIs = True 'отмечаем это
                'получаем значение переменной по названию привязки 
                MyVar = Application.ActiveDocument.Variables.Item(VarName).Value 

            End If

        Next aVar

If VarIs Then 'если в документе привязка есть

     'производим необходимые действия с переменной

End If

Примечание. Закладки, не относящиеся к привязкам, например, созданные пользователем самостоятельно, при копировании отчетов не изменяются.

Значение (пусто) в сводной таблице — как убрать

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

Но Пусто выводится и в том случае, если пустых ячеек нет, и портит внешний вид сводной таблицы. Часто его убирают.

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

В этом случае Пусто исчезнет и для строк, и для столбцов одновременно.

Обратите внимание! Если вы убираете значение Пусто, то есть следующая опасность: при добавлении новых значений в исходную таблицу (например, появится новая категория товара) они не появятся автоматически при обновлении сводной таблицы. Их нужно будет добавить вручную, установив “галочку” (там же, где снимали “галочку” с Пусто).

Способы создания макросов в Excel

В Excel и других программах Microsoft Office макросы создаются в виде кода на языке программирования VBA (Visual Basic for Applications). Этот язык разработан в Microsoft специально для программ компании — он представляет собой упрощённую версию языка Visual Basic. Но это не значит, что для записи макроса нужно уметь кодить.

Есть два способа создания макроса в Excel:

  • Написать макрос вручную.
    Это способ для продвинутых пользователей. Предполагается, что они откроют окно Visual Basic в Еxcel и самостоятельно напишут последовательность действий для макроса в виде кода.
  • Записать макрос с помощью кнопки меню Excel.
    Способ подойдёт новичкам. В этом варианте Excel запишет программный код вместо пользователя. Нужно нажать кнопку записи и выполнить все действия, которые планируется включить в макрос, и после этого остановить запись — Excel переведёт каждое действие и выдаст алгоритм на языке VBA.

Разберёмся на примере, как создать макрос с помощью второго способа.

Допустим, специальный сервис автосалона выгрузил отчёт по продажам за три месяца первого квартала в формате таблиц Excel. Эти таблицы содержат всю необходимую информацию, но при этом никак не отформатированы: колонки слиплись друг с другом и не видны полностью, шапка таблицы не выделена и сливается с другими строками, часть данных не отображается.

Так выглядят таблицы с продажами автосалона в первоначальном видеСкриншот: Skillbox Media

Как создается сводная таблица в Excel

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

Если не обратить на это внимание, в дальнейшем могут возникнуть проблемы. Условия таковы:

  • над каждым столбцом есть шапка с заголовком;
  • каждая ячейка в таблице заполнена;
  • установлены форматы ячеек (например, только формат «Дата» для дат);
  • в одной ячейке указываются данные только одного формата;
  • необходимо разделить объединенные ячейки.

Рассмотрим два метода создания табличного отчета.

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

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

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

  1. Нажимаем на одну из ячеек источника и открываем вкладку «Главная» в верхней части экрана. Нужно найти раздел «Стили», а в нем – функцию «Форматировать как таблицу». Выбираем понравившийся стиль.

1

  1. На экране возникнет окошко, куда требуется добавить диапазон данных. Обычно строка уже заполнена, остается проверить координаты, поставить галочку в графе «Таблица с заголовками» и нажать «ОК».

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

  1. Необходимо открыть вкладку «Вставка», кликнуть по пункту «Сводная таблица» в левой части экрана.

3

  1. На экране появится окошко для составления сводной таблицы. Выбираем диапазон данных, из него будет создан отчет. Сначала в строке появится имя первой таблички – если есть необходимость, можно выбрать другие ячейки или указать имя другой таблицы из того же документа.
  2. Выберем место, где будет размещена сводная таблица. Ее можно поместить на тот же лист или на новый в одном документе с начальными данными.
  3. После заполнения всех полей нажимаем «ОК».

4

  1. Откроется окно для формирования таблички. В нем находится список полей и области настроек. В верхней части окна выбираем нужные поля. После этого перетаскиваем их в нужные области.

В заданной ситуации нужны несколько полей. «Пол» и «Вид спорта» попадают в категорию «Фильтры», «Наименование» – в область «Строки», «Сумма» перемещается в «Значение». Раздел «Столбцы» остается пустым.

5

Когда таблица сформирована, нужно применить выбранные фильтры. Разберем этот этап по шагам. Стоит вспомнить условие: нужно определить продажи женских теннисных кроссовок.

  1. Открываем раздел «Пол» в таблице и выбираем «Женский», после этого кликаем «ОК».

6

  1. Применяем фильтр к виду спорта – согласно условию, необходимо поставить галочку в графе «Теннис» и кликнуть «ОК».

Результат: на листе представлены только запрошенные данные. Информация о сумме в нескольких строчках с одинаковым наименованием суммируется.

7

Использование Мастера сводных таблиц

Составить отчет можно с помощью специального инструмента – Мастера сводных таблиц. Функция не находится в быстром доступе по умолчанию, поэтому сначала добавим ее туда.

  1. Открываем вкладку «Файл», ее раздел «Параметры». Находим пункт «Панель быстрого доступа», в появившемся списке выбираем пункт «Мастер сводных таблиц и диаграмм». Кнопка «Добавить» станет активной, по ней нужно кликнуть, а после – нажать «ОК».

8

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

9

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

10

  1. Определяем, где собираемся разместить сводную табличку. Если выбираете «Существующий лист», укажите конкретный лист из документа.

11

  1. Заполняем форму сводной таблички по правилам классического метода и выставляем фильтры.

Пример создания Сводной таблицы макросом VBA Excel (эксель)

Хочу сразу оговориться, что многие авторитетные сайты, не считают задачу формирования сводной таблицы средствами VBA уместной. По их мнению, прекрасный инструментарий Excel позволяет с наименьшими трудностями обходиться без макросов в этом вопросе… Но, ко мне обращались, представители аналитического сообщества, которым скучно, и неприятно утомительно, из раза в раз устанавливать десятки флажков (checkbox) по нескольким полям большой Базы данных…. Так что все зависит от конкретного случая…. Для кого-то это решение может стать лучшим….

Определение строк сводной таблицы.

На этом этапе важно определить уровни группировки данных (по Вашему желанию или желанию Вашего руководства). With svT.PivotFields(«Препарат») .Orientation = xlRowField .Position = 1 End With With svT.PivotFields(«Упаковка») .Orientation = xlRowField .Position = 2 End With

With svT.PivotFields(«Препарат») .Orientation = xlRowField .Position = 1 End With With svT.PivotFields(«Упаковка») .Orientation = xlRowField .Position = 2 End With

Как видим, здесь в группу «Препарат» попали все виды упаковок данного лекарства.

Определение фильтров сводной таблицы.

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

‘добавляем эталонные строковые значения в массив необходимого размера ReDim ar(0 To 5) ar(0) = «Москва»: ar(1) = «г Москва»: ar(2) = «Москва г»: ar(3) = «Москва, ТЦ «»Малая Родина»»»: ar(4) = «г Владимир»: ar(5) = «Зеленоград»

А сейчас формируем положительный фильтр по этим нескольким значениям

FilterPlusMinus True, ar, «Город» ‘оставляет только указанные города

Или отрицательный фильтр (результат показан на Рис.4)

FilterPlusMinus False, ar, «Город» ‘оставляет города, за исключением указанных

Конечно, фильтр, допускающий только одно значение выглядит проще…

‘добавление фильтра с одним значением With ActiveSheet.PivotTables(tNam).PivotFields(«Поставщик») .Orientation = xlPageField .Position = 1 End With svT.PivotFields(«Поставщик»).ClearAllFilters svT.PivotFields(«Поставщик»).CurrentPage = «Санофи Россия»

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

‘добавление фильтра со всеми значениями (для ручной корректировки в процессе анализа) With ActiveSheet.PivotTables(tNam).PivotFields(«Плательщик») .Orientation = xlPageField .Position = 1 End With svT.PivotFields(«Плательщик»).CurrentPage = «(All)»

Определение полей сводной таблицы с Итоговыми данными (здесь суммами значений).

Итоговые данные (не обязательно суммирование) всегда представляют исключительный интерес… Правда? Таких полей в сводной таблице может быть несколько, но в моем примере на «листе данных» больше нет числовых полей, поэтому и суммирование проводить больше, как по полю «Количество», не уместно…

svT.AddDataField svT.PivotFields(«Количество»), «Сумма по полю Количество», xlSum

И вот, результат.

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

Поэтому, изучать язык программирования VBA очень интересно и выгодно. Долго…? Времени на изучение жалко…? В принципе… это не обязательно… Как не обязательно знать электронную начинку телевизора, чтобы использовать этот телевизор по назначению… Если Вы сотрудничаете с программистом, то Вам останется – указать минимум данных и запустить уже готовый макрос… Все. Пробуйте…

Понравилась статья? Поделиться с друзьями:
Самоучитель Брин Гвелл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: