Макросы excel для создания таблиц

Создание таблицы с помощью кода VBA Excel. Создание умной и обычной пользовательской таблицы. Указание стиля умной таблицы, добавление строки итогов. Примеры.

Создание и удаление умной таблицы

Создание умной таблицы

Создается умная таблица Excel с помощью следующего кода:

ActiveSheet.ListObjects.Add(xlSrcRange, Range(«$A$1:$L$15»), , xlNo).Name _

= «МояТаблица1»

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

ActiveSheet — лист, на котором создается таблица, может быть любой лист рабочей книги Excel.

Range(«$A$1:$L$15») — диапазон, который преобразуется в таблицу. Можно использовать и такую форму: Range(Cells(1, 1), Cells(15, 12)), где индексы строк и столбцов можно заменить переменными.

xlNo — указывает, что первая строка выбранного диапазона не содержит заголовки столбцов (граф) будущей таблицы, и их необходимо добавить. В этом случае будет добавлена дополнительная строка с наименованиями столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д., которые в дальнейшем можно переименовать (количество строк в таблице, включая строку заголовков, получится на одну больше, чем в указанном диапазоне). Если в диапазоне уже содержатся заголовки столбцов будущей таблицы, то следует указать вместо xlNo значение xlYes. В этом случае первая строка указанного диапазона будет преобразована в строку заголовков, а если она будет не заполнена, то добавятся названия столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д. (количество строк в таблице, включая строку заголовков, будет то же, что и в указанном диапазоне).

МояТаблица1 — имя, присваиваемое создаваемой таблице. Имя должно быть без пробелов: при указании в коде VBA названия таблицы с пробелами, во время его выполнения Excel заменит пробелы знаками подчеркивания (по крайней мере, так происходит в Excel 2016).

Таблица будет создана со стилем по умолчанию (TableStyleMedium2 в Excel 2016).

Стиль умной таблицы

Присвоение стиля таблице (изменение стиля) осуществляется с помощью свойства TableStyle объекта ListObjects:

ActiveSheet.ListObjects(«МояТаблица1»).TableStyle = «TableStyleMedium15»

Свойство TableStyle может принимать следующие значения:

  • TableStyleLight (светлый) с индексом от 1 до 21 (в Excel 2016);
  • TableStyleMedium (средний) с индексом от 1 до 28 (в Excel 2016);
  • TableStyleDark (темный) с индексом от 1 до 11 (в Excel 2016).

Например, TableStyleLight5, TableStyleMedium24, TableStyleDark8.

Чтобы отменить стиль таблицы в коде VBA, необходимо свойству TableStyle присвоить пустую строку:

ActiveSheet.ListObjects(«МояТаблица1»).TableStyle = «»

Этому коду соответствует выбор в разделе «Конструктор» на ленте инструментов Excel самого первого значка стилей в разделе «Светлый».

Добавление строки итогов

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

ActiveSheet.ListObjects(«МояТаблица1»).ShowTotals = True

Удаляется строка итогов умной таблицы так:

ActiveSheet.ListObjects(«МояТаблица1»).ShowTotals = False

Удаление умной таблицы

Удалить умную таблицу очень просто:

ActiveSheet.ListObjects(«МояТаблица1»).Delete

Создание пользовательской таблицы

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

Для создания такой таблицы необходимо:

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

Подробнее о создании пользовательской таблицы в Примере 2.

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

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

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

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

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

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

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

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

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Sub test1()

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

Dim a As Long

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

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

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

End Sub

Результат выполнения кода Примера 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

Sub test2()

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

Dim a As Long

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

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) = «Итого:»

With Cells(a + 2, 5)

.FormulaR1C1 = «=SUM(R[-« & a & «]C:R[-1]C)»

.Borders.LineStyle = True

.Font.Bold = True

End With

‘Выделяем заголовки жирным шрифтом и

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

With Range(Cells(1, 1), Cells(1, 5))

.Font.Bold = True

.EntireColumn.AutoFit

End With

End Sub

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

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

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

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


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


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

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

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

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

Тестовая база для примера.

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

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

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

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

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

Код-Visual Basic.

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

Sub CreateTableM()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Лист1!A1:D21").CreatePivotTable TableDestination:="", TableName:="ТаблицаМ"
With ActiveSheet
.Name = "Анализ"
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
With ActiveSheet.PivotTables("ТаблицаМ")
.SmallGrid = True
.PivotFields("Оборот").Orientation = xlDataField
.PivotFields("Год").Orientation = xlPageField
.PivotFields("Месяц").Orientation = xlRowField
.PivotFields("Магазины").Orientation = xlColumnField
End With
End Sub

Исходный код макроса.

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

Сгенерирована сводная таблица.

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



Описание VBA-кода макроса для создания сводной таблицы Excel

Данный исходный код макроса позволяет автоматически сгенерировать сводную таблицу, такую же как показано на рисунке 4. Первая строка кода выглядит весьма необычно, но жизненно необходима для дальнейшей работы программы. Она содержит набор базовых параметров для коллекции PivotCaches, которые будут применены к создаваемой сводной таблице. В первом свойстве SourceType объявляется источник для загрузки данных в бедующую сводную таблицу. Параметр xlDatabase говорит нам о том, что исходные данные берутся с рабочего листа Excel.

Используя свойство SourceData задаем ссылку на диапазон ячеек, в котором находиться исходные данные предназначенные для последующей обработки. Указывая адрес ссылки в форме Лист1!A1:D21, мы определяем целый диапазон таблицы с исходными данными включая ее заголовки столбцов. Оба свойства (SourceType и SourceData) являются здесь аргументами для метода Add, который выполняет функцию сбора информации – аналогично инструкциям выполняемых при работе с мастером сводных таблиц. Функция создания сводной таблицы реализуется методом .CreatePivotTable, для которого так же необходимо указать следующие параметры.

Свойство TanleDestination позволяет установить место для вставки будущей сводной таблицы. Если есть необходимость вставить таблицу в конкретном месте выбранного листа, тогда следует указать здесь адрес ячейки для вставки. А если же необходимо создать сводную таблицу на новом листе, тогда достаточно указать пустую строку (“”) в качестве параметра. С помощью свойства TableName присваиваем внутреннее имя будущей таблицы, в данном примере это «ТаблицаМ». Обратите внимание, что название таблицы отличается от названия листа, в котором она будет находится. Благодаря присвоению внутреннего имени для создаваемой таблицы, появляется возможность отличать ее от многих других таблиц. Но самое главное преимущество – это возможность непосредственно ссылаться к таблице через имя, вместо того чтобы каждый раз указывать место и диапазон, где будет находиться сводная таблица.

Далее с помощью инструкции конструктора With собираем блок инструкций методов, свойств и параметров структуры. Все дальнейшие опции будут реализованы внутри свойства ActiveSheet. То есть будут касаться листа, в котором будет создана сводная таблица.

Свойством Name мы определяем имя для нового листа – в данном примере это имя «Анализ». Если нужно задать для нового листа имя такое же как у новой сводной таблицы (Таблица М), тогда эту задачу лучше всего реализовать именно на данном этапе написания кода макроса.

В следующей строке определяем место на новом листе, где будет сгенерирована сводная таблица. Указывая для параметра TanleDestination свойство:

ActiveSheet.Cells(3,1)

Так мы определяем, что таблица будет сгенерирована в третьей строке и в первом столбце листа. То есть в ячейке A3. Эти строки кода определяют базовую информацию о сводной таблице. Закрываем конструктор инструкцией End With.

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

В следующих строках кода можно определить в каких полях должны находиться отобранные данные из исходной таблицы. Эта часть исходного кода должна начинаться с очередной инструкции конструктора With и заканчиваться инструкцией End With. А внутри конструктора указываться все параметры полей сводной таблицы.

Содержание

  1. Что такое макрос?
  2. Запись макроса в Excel
  3. Первая программа на VBA Excel
  4. Запуск редактора Visual Basic
  5. Альтернативный вариант открытия файла
  6. Создание «умной» таблицы
  7. Стиль «умной» таблицы
  8. Добавление строки итогов
  9. Отображение вкладки “Разработчик” в ленте меню
  10. Знакомство с редактором VBA
  11. Создание сводных таблиц макросом
  12. Примеры макросов для автоматизации работы
  13. Окна редактора Visual Basic

Что такое макрос?

Для начала немного о терминологии.

Макрос – это код, написанный на встроенном в Excel языке VBA (Visual Basic for Application). Макросы могут создаваться как вручную, так и записываться автоматически с помощью так называемого макрорекодера.

Макрорекодер – это инструмент в Excel, который пошагово записывает все что вы выполняете в Excel и преобразует это в код на языке VBA. Макрорекодер создает очень подробный код (как мы увидим позже), который вы сможете при необходимости отредактировать в дальнейшем.

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

Теперь давайте погрузимся и посмотрим, как записать макрос в Excel.

Теперь давайте запишем очень простой макрос, который выбирает ячейку и вводит в нее текст, например “Excel”.

Вот шаги для записи такого макроса:

  1. Перейдите на вкладку “Разработчик”.
  2. В группе “Код” нажмите кнопку “Запись макроса”. Откроется одноименное диалоговое окно.
  3. В диалоговом окне “Запись макроса” введите имя для своего макроса, например “ВводТекста”. Есть несколько условий именования, которые необходимо соблюдать при назначении макроса. Например, вы не можете использовать пробелы между ними. Обычно я предпочитаю сохранять имена макросов как одно слово, с разными частями с заглавным первым алфавитом. Вы также можете использовать подчеркивание для разделения двух слов – например, “Ввод_текста”.
  4. Если вы хотите, то можете задать сочетание клавиш. В этом случае мы будем использовать ярлык Ctrl + Shift + N. Помните, что сочетание, которое вы указываете, будет отменять любые существующие горячие клавиши в вашей книге. Например, если вы назначили сочетание Ctrl + S, вы не сможете использовать это для сохранения рабочей книги (вместо этого, каждый раз, когда вы его используете, он выполняет макрос).
  5. В поле “Сохранить в” убедитесь, что выбрана опция “Эта книга”. Этот шаг гарантирует, что макрос является частью рабочей книги. Он будет там, когда вы сохраните его и снова откроете, или даже если вы поделитесь файлом с кем-то.
  6. Введите описание при необходимости. Обычно я этого не делаю, но если у вас много макросов, лучше указать, чтобы в будущем не забыть что делает макрос.
  7. Нажмите “ОК”. Как только вы нажмете OK, Excel начнет записывать ваши действия. Вы можете увидеть кнопку “Остановить запись” на вкладке “Разработчик”, которая указывает, что выполняется запить макроса.
  8. Выберите ячейку A2.
  9. Введите текст “Excel” (или вы можете использовать свое имя).
  10. Нажмите клавишу Enter. Вы попадете на ячейку A3.
  11. Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.

Поздравляем! Вы только что записали свой первый макрос в Excel. Хотя макрос не делает ничего полезного, но он поможет нам понять как работает макрорекордер в Excel.

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

  1. Удалите текст в ячейке A2. Это нужно, чтобы проверить будет ли макрос вставлять текст в ячейку A2 или нет.
  2. Выберите любую ячейку – кроме A2. Это нужно проверить, выбирает ли макрос ячейку A2 или нет.
  3. Перейдите на вкладку “Разработчик”.
  4. В группе “Код” нажмите кнопку “Макросы”.
  5. В диалоговом окне “Макрос” щелкните макрос “ВводТекста”.
  6. Нажмите кнопку “Выполнить”.

Вы увидите, что как только вы нажмете кнопку “Выполнить”, текст “Excel” будет вставлен в ячейку A2 и выбрана ячейка A3. Это происходит за миллисекунды. Но на самом деле макрос последовательно выполнил записанные действия.

Примечание. Вы также можете запустить макрос с помощью сочетания клавиш Ctrl + Shift + N (удерживайте клавиши Ctrl и Shift, а затем нажмите клавишу N). Это тот же самый ярлык, который мы назначили макросу при его записи.

Первая программа на VBA Excel

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

  1. Откройте стандартный модуль двойным кликом по его ссылке в проводнике. Поместите в него курсор и нажмите кнопку «Procedure…» во вкладке «Insert» главного меню. Та же ссылка будет доступна при нажатии на вторую кнопку после значка Excel на панели инструментов.

В результате откроется окно добавления шаблона процедуры (Sub).

  1. Наберите в поле «Name» имя процедуры: «Primer1», или скопируйте его отсюда и вставьте в поле «Name». Нажмите кнопку «OK», чтобы добавить в модуль первую и последнюю строки процедуры.

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

  1. Вставьте внутрь шаблона процедуры следующую строку: MsgBox "Привет".

Функция MsgBox выводит информационное сообщение с указанным текстом. В нашем примере – это «Привет».

  1. Проверьте, что курсор находится внутри процедуры, и запустите ее, нажав клавишу «F5». А также, запустить процедуру на выполнение можно, нажав на треугольник (на изображении под пунктом меню «Debug») или на кнопку «Run Sub/UserForm» во вкладке «Run» главного меню редактора VBA Excel.


Если вы увидели такое сообщение, как на изображении, то, поздравляю – вы написали свою первую программу!

Запуск редактора Visual Basic

Простейший способ запустить редактор Visual Basic в Excel – нажать комбинацию клавиш Alt+F11 (то есть нажать клавишу Alt и, удерживая её, нажать клавишу F11). После этого откроется окно редактора Visual Basic, как показано на картинке ниже. Имейте ввиду, что окно Excel остается открытым и находится позади окна редактора.

Альтернативный вариант открытия файла

 Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.Open fname, local:=True Set ws = wb.Item(1).ActiveSheet 

При открытии файла можно использовать доп.параметры (приведу некоторые):

UpdateLinks – обновлять или нет внешние ссылки при открытии файла;
ReadOnly – открытие в режиме только для чтения;
Format – используемый при открытии разделитель (1 – символ tab, 2 – запятые, 3 – пробелы, 4 – точка с запятой, 5 – без разделителя, 6 – пользовательский разделитель, заданный в Delimiter);
Delimiter – пользовательский разделитель (в случае, если Format = 6);
Origin – тип операционной системы (xlMacintosh, xlWindows или xlMSDOS);
Local – использование в Excel языка такого же, как в открываемом файле.

Теперь можно выполнять какие-то действия с открытым файлом, просто обращаясь через wb и ws.

 ws.Cells(1, 1).Value = "Test" ws.Cells(1, 1).Font.Size = 18 ' Поменять размер шрифта ws.Cells(1, 1).HorizontalAlignment = xlCenter ' 

Создание «умной» таблицы

Создается «умная» таблица Excel с помощью следующего кода:

ActiveSheet.ListObjects.Add(xlSrcRange, Range(“$A$1:$L$15”), , xlNo).Name _

= “МояТаблица1”

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

ActiveSheet – лист, на котором создается таблица, может быть любой лист рабочей книги Excel.

Range(“$A$1:$L$15”) – диапазон, который преобразуется в таблицу. Можно использовать и такую форму: Range(Cells(1, 1), Cells(15, 12)), где индексы строк и столбцов можно заменить переменными.

xlNo – указывает, что первая строка выбранного диапазона не содержит заголовки столбцов (граф) будущей таблицы, и их необходимо добавить. В этом случае будет добавлена дополнительная строка с наименованиями столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д., которые в дальнейшем можно переименовать (количество строк в таблице, включая строку заголовков, получится на одну больше, чем в указанном диапазоне). Если в диапазоне уже содержатся заголовки столбцов будущей таблицы, то следует указать вместо xlNo значение xlYes. В этом случае первая строка указанного диапазона будет преобразована в строку заголовков, а если она будет не заполнена, то добавятся названия столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д. (количество строк в таблице, включая строку заголовков, будет то же, что и в указанном диапазоне).

МояТаблица1 – имя, присваиваемое создаваемой таблице. Имя должно быть без пробелов: при указании в коде VBA названия таблицы с пробелами, во время его выполнения Excel заменит пробелы знаками подчеркивания (по крайней мере, так происходит в Excel 2016).

Таблица будет создана со стилем по умолчанию (TableStyleMedium2 в Excel 2016).

Стиль «умной» таблицы

Присвоение стиля таблице (изменение стиля) осуществляется с помощью свойства TableStyle объекта ListObjects:

ActiveSheet.ListObjects(“МояТаблица1”).TableStyle = “TableStyleMedium15”

Свойство TableStyle может принимать следующие значения:

  • TableStyleLight (светлый) с индексом от 1 до 21 (в Excel 2016);
  • TableStyleMedium (средний) с индексом от 1 до 28 (в Excel 2016);
  • TableStyleDark (темный) с индексом от 1 до 11 (в Excel 2016).

Например, TableStyleLight5, TableStyleMedium24, TableStyleDark8.

Чтобы отменить стиль таблицы в коде VBA, необходимо свойству TableStyle присвоить пустую строку:

ActiveSheet.ListObjects(“МояТаблица1”).TableStyle = “”

Этому коду соответствует выбор в разделе «Конструктор» на ленте инструментов Excel самого первого значка стилей в разделе «Светлый».

Добавление строки итогов

Строка итогов «умной» таблицы добавляется следующим образом:

ActiveSheet.ListObjects(“МояТаблица1”).ShowTotals = True

Удаляется строка итогов «умной» таблицы так:

ActiveSheet.ListObjects(“МояТаблица1”).ShowTotals = False

Отображение вкладки “Разработчик” в ленте меню

Перед тем как записывать макрос, нужно добавить на ленту меню Excel вкладку “Разработчик”. Для этого выполните следующие шаги:

  1. Щелкните правой кнопкой мыши по любой из существующих вкладок на ленте и нажмите «Настроить ленту». Он откроет диалоговое окно «Параметры Excel».
  2. В диалоговом окне «Параметры Excel» у вас будут параметры «Настроить ленту». Справа на панели «Основные вкладки» установите флажок «Разработчик».
  3. Нажмите «ОК».

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

Знакомство с редактором VBA

  1. Создайте новую книгу Excel и сохраните ее как книгу с поддержкой макросов с расширением .xlsm. В старых версиях Excel по 2003 год – как обычную книгу с расширением .xls.
  2. Нажмите сочетание клавиш «левая_клавиша_Alt+F11», которое откроет редактор VBA. С правой клавишей Alt такой фокус не пройдет. Также, в редактор VBA можно перейти по ссылке «Visual Basic» из панели инструментов «Разработчик» на ленте быстрого доступа. Если вкладки «Разработчик» на ленте нет, ее следует добавить в настройках параметров Excel.

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

  1. Нажмите кнопку «Module» во вкладке «Insert» главного меню. То же подменю откроется при нажатии на вторую кнопку после значка Excel на панели инструментов.

После нажатия кнопки «Module» вы увидите ссылку на него, появившуюся в проводнике слева.

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

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

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

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

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

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

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

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

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

SubCreateTableM()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Лист1!A1:D21").CreatePivotTable TableDestination:="", TableName:="ТаблицаМ"
WithActiveSheet
.Name ="Анализ"
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With
WithActiveSheet.PivotTables("ТаблицаМ")
.SmallGrid =True
.PivotFields("Оборот").Orientation = xlDataField
.PivotFields("Год").Orientation = xlPageField
.PivotFields("Месяц").Orientation = xlRowField
.PivotFields("Магазины").Orientation = xlColumnField
End With
End Sub

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

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

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

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

Макрос для поиска ближайшего значения заданному на всех листах книги Excel.
Готовое решение для поиска на всех листах рабочей книги как точного, так и максимально приближенного исходного значения. VBA код макрос для нахождения и получения числа с любого листа книги.

Макрос для слияния данных при серийной печати рассылок в Excel.
Альтернатива инструменту слияния в Word для печати рассылок прямо из Excel. Исходный код макроса, который выполняет слияние данных для серийной печати рассылок.

Макросы для фильтра сводной таблицы в Excel.
Как автоматизировать фильтр в сводных таблицах с помощью макроса? Исходные коды макросов для фильтрации и скрытия столбцов в сводной таблице.

Макрос позволяет рассчитать процент в сводной таблице Excel.
Как быстро преобразовать значения сводной таблицы на доли в процентном соотношении к общим итогам по строкам и по столбцам? Исходные коды макросов для работы с процентами.

Макрос для настройки полей и форматирования сводной таблицы.
Управление полями сводной таблицы с помощью макроса. Исходный код VBA-макроса для настройки и изменения структуры в сводных таблицах.

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

Макросы для изменения формата ячеек в таблице Excel.
Как форматировать ячейки таблицы макросом? Изменение цвета шрифта, заливки и линий границ, выравнивание. Автоматическая настройка ширины столбцов и высоты строк по содержимому с помощью VBA-макроса.

VBA макрос для поиска скрытых строк и столбцов на листе Excel.
Поиск всех скрытых строк и столбцов на рабочем листе с помощью VBA-макроса. Исходные коды макросов для получения сводной информации о скрытых строках и столбцах рабочего листа.

Макрос для копирования и переименования листов Excel.
Как одновременно копировать и переименовывать большое количество листов одним кликом мышкой? Исходный код макроса, который умеет одновременно скопировать и переименовать любое количество листов.

Окна редактора Visual Basic

В процессе работы в редакторе Visual Basic в Excel могут быть открыты различные окна. Управление окнами осуществляется в меню View, которое находится в верхней части окна редактора VBA.

Источники

  • https://micro-solution.ru/excel/vba/first-macros
  • https://vremya-ne-zhdet.ru/vba-excel/nachinayem-programmirovat-s-nulya/
  • https://office-guru.ru/excel/redaktor-visual-basic-v-excel-451.html
  • https://codernotes.ru/articles/vba/rabota-s-excel-fajlom-iz-vba.html
  • https://vremya-ne-zhdet.ru/vba-excel/sozdaniye-tablitsy/
  • https://exceltable.com/vba-macros/makros-svodnoy-tablicy
  • https://exceltable.com/vba-macros/

Запись макроса для создания сводной таблицы

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

Прежде всего создайте таблицу данных,
похожую на представленную на рис. 19.1.
Пусть эта таблица имеет заголовки Год,
Район, Категория товара и Объем
продаж
.

Если вы хотите, чтобы таблица данных на
рабочем листе воспринималась Excel как
список, позаботьтесь о том, чтобы
заголовки столбцов были выделены
шрифтом, отличным оттого, каким набраны
строки сданными.

Выделите таблицу данных и начните запись
макроса. Выполните команду Данные >
Сводная таблица
. В первом диалоговом
окне мастера сводных таблиц установите
переключатели в списке или базе данных
Microsoft Excel
и сводная таблица. Щелкните
на кнопке Далее. В следующем диалоговом
окне удостоверьтесь, что выбран весь
диапазон таблицы данных, и щелкните на
кнопке Далее. В третьем диалоговом
окне мастера сводных таблиц установите
переключатель новый лист и щелкните на
кнопке Готово. В рабочую книгу будет
добавлен новый лист, содержащий пустую
сводную таблицу (рис. 19.5).

Рис. 19.5. После завершения работы мастера
сводных таблиц на новом рабочем листе
отобразится пустой макет сводной таблицы

Рис. 19.6. Законченная сводная таблица

Перетащите из панели Сводные таблицы
поле Год в область сводной таблицы,
помеченную словами Перетащите сюда
поля страниц
. Перетащите поле Район
в область, помеченную словами Перетащите
сюда поля строк
. Далее перетащите в
область столбцов сводной таблицы поле
Категория товара, а в область данных
— поле Объем продаж. Законченная
сводная таблица показана на рис. 19.6.
Остановите запись макроса.

Прежде чем исследовать код макроса,
поэкспериментируйте со сводной таблицей.
В поле списка рядом с полем Год
щелкните на кнопке со стрелкой,
направленной вниз, в открывшемся списке
выберите 1997 и щелкните на кнопке
ОК. В сводной таблице отобразится
информация, относящаяся только к 1997
году. Щелкните в поле Категория товара
на кнопке со стрелкой, направленной
вниз, и снимите флажки Бытовая
электротехника
и Средства
автоматизации
. Щелкните на кнопке
ОК, теперь в сводной таблице будут
представлены только данные по средствам
связи. Проделав описанные операции в
обратном порядке, восстановите
первоначальный вид сводной таблицы.

Исследование кода макроса

Перейдите в редактор Visual Basic и в окне
проектов найдите текущую книгу. Откройте
папку Modules и затем Module1 — вы увидите
код макроса в виде процедуры
МояСводнаяТаблица (если такое имя
вы дали своему макросу). Полный код этой
процедуры приведен в листинге 19.1.

Листинг 19.1. Процедура МояСводнаяТаблица

l:Sub
МояСводнаяТаблица()

2:
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDataBase, _

3: 
SourceData:= «Лист1!R1C1:R37C4»).CreatePivotTable
_

    TableDestination:=»»,
TableName:»= «СводнаяТаблица1»

4:
ActiveSheet.PivotTableWizard _

5: 
TableDestination:=ActiveSheet.Cells(3,1)

6:
ActiveSheet.Cells(3,1).Select

7:
ActiveSheet.PivotTables(«СводнаяТаблица1»).SmallGrid
= False

8:
With ActiveSheet.PivotTables(«СводнаяТаблица1»).
_

    PivotFields(«Год»)

9: 
.Orientation = xlPageField

10: 
.Position = 1

11:
End With

12:
With ActiveSheet.PivotTables(«СводнаяТаблица1»).
_

     PivotFields(«Район»)

13: 
.Orientation = xlRowField

14: 
.Position = 1

15:
End With

16:
With ActiveSheet.PivotTables(«СводнаяТаблица1»).
_

     PivotFields(«Категория
товара»)

17: 
.Orientation = xlColumnField

18: 
.Position = 1

19:
End With

20:
With ActiveSheet.PivotTables(«СводнаяТаблица1»].
_

     PivotFields(«Объем
продаж»)

21: 
.Orientation = xlDataField

22: 
.Position = 1

23: 
End With

24:End
Sub

Первый оператор в этой процедуре
выполняет метод Add (Добавить)
применительно к коллекции PivotCaches
(Основные кэши). На самом деле в этом
операторе выполняются два метода. В
дополнение к метолу Add, создающему
элемент коллекции PivotCaches, исполняется
еще метод CreatePivotTable (Создать сводную
таблицу), название которого говорит
само за себя:

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDataBase,
SourceData:= _

 «Лист1!R1C1:R37C4″).CreatePivotTable
TableDestination:=»», _

 TableName:=
«СводнаяТаблица1»

Обратите внимание, что в методе
CreatePivotTable аргумент TableDestination
принимает значение пустой строки — для
Excel это является указанием создать
сводную таблицу на новом рабочем листе.
После создания нового рабочего листа
и сводной таблицы задается ряд свойств:

ActiveSheet.PivotTableWizard
TableDestination:=ActiveSheet. _

 Cells(3,
1)

ActiveSheet.Cells(3,1).Select

ActiveSheet.PivotTables(«СводнаяТаблица1»).SmallGrid
= False

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

With
ActiveSheet.PivotTables(«СводнаяТаблица1»).PivotFields(«Год»]

 .Orientation
= xlPageField

 .Position
= 1

End
With

With
ActiveSheet.PivotTables(«СводнаяТаблица1»).PivotFields(«Район»)

 .Orientation
= xlRowField

 .Position
= 1

End
With

With
ActiveSheet.PivotTables(«СводнаяТаблица1»).
_

 PivotFields(«Категория
товара»)

 .Orientation
= xlColumnField

 .Position
= 1

End
With

With
ActiveSheet.PivotTables(«СводнаяТаблица1»).
_

 PivotFields»Объем
продаж»)

 .Orientation
= xlDataField

 .Position
= 1

End
With

Если сейчас вы попытаетесь выполнить
макрос еще раз, то получите сообщение
об ошибке, так как сводная таблица с тем
именем, которое указано в аргументе
TableName (Имя таблицы), уже создана.
Чтобы сделать процедуру более гибкой,
внесите в ее код изменения, показанные
в листинге 19.2 (измененные и новые
операторы выделены полужирным шрифтом).

Листинг 19.2. Измененная процедура
МояСводнаяТаблица

1:Sub
МояСводнаяТаблица()

2:
Dim
ptSales As PivotTable

3:

4:
Set
ptSales = ActiveWorkbook.PivotCaches.Add _

    (SourceType:=xlDataBase,
SourceData:=

5: 
«Лист1!R1C1:R37C4″).CreatePivotTable(TableDestination:=»»)

6:
ActiveSheet.PivotTableWizard _

    TableDestination:=ActiveSheet.Cells(3,1)

7:
ActiveSheet.Cells(3,1).Select

8:
ptSales.SmallGrid
= False

9:
With ptSales.PivotFields(«Год»)

10: 
.Orientation = xlPageField

11: 
.Position = 1

12:
End With

13:
With ptSales.PivotFields(«Район»)

14: 
.Orientation = xlRowField

15: 
.Position = 1

16:
End With

17:
With ptSales.PivotFields(«Категория
товара»)

13: 
.Orientation = xlColumnField

19: 
.Position = 1

20:
End With

21:
With ptSales.PivotFields(«Объем
продаж»)

22: 
.Orientation = xlDataField

23: 
.Position = 1

24:
End With

25:End
Sub

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

Резюме

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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

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

Предположим, в столбце А есть длинный список имен, причем в ячейке А1 находится заголовок. Вы хотите узнать, сколько элементов содержится в списке, и создать список уникальных элементов. Выделите ячейку А1 (заголовок) и выберите команду Данные → Сводная таблица (Data → PivotTable and PivotChart Report) (или Data → PivotTable Report на Mac), чтобы запустить мастер сводных таблиц.

Удостоверьтесь, что установлен переключатель В списке или базе данных Microsoft Excel (Microsoft Excel List or Database) и что выделена одна ячейка данных. Это позволит Excel автоматически распознать данные, на основе которых будет далее строиться сводная таблица. Если вы работаете в windows microsoft, то в группе Вид создаваемого отчета (What kind of report do you want to create?) выберите Сводная таблица (PivotTable) (на Macintosh этот вопрос не выводится). Щелкните кнопку Далее (Next). Мастер сводных таблиц должен автоматически выбрать правильный диапазон данных в столбце А и выделить его на листе. Если это так, щелкните кнопку Далее (Next). Иначе выделите диапазон мышью. Щелкните кнопку Макет (Layout) и перетащите в область Данные (Data) то, что будет вашим единственным полем, — над этой областью вы должны увидеть заголовок из ячейки А1. Еще раз перетащите поле с заголовком, на этот раз в область Строка (Row). Щелкните на кнопке ОК.
[stextbox id=»info»]На данном этапе, если необходимо, можно дважды щелкнуть кнопку поля в области Данные (Data) и изменить значение параметра Операция (Summarize by). Можно выбрать Сумма (Sum), Среднее (Average) и т. д. По умолчанию Excel выбирает функцию СЧЁТ (COUNT), если работа идет с текстом, и функцию СУММ (SUM), если это числа.[/stextbox]
Теперь в качестве местоположения отчета сводной таблицы выберите Новый лист (New Worksheet) и щелкните кнопку Готово (Finish). На новом рабочем листе вы должны увидеть сводную таблицу, содержащую уникальные имена из исходного списка и указание, сколько раз каждый элемент (имя) содержится в списке.

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

Выберите команду Сервис → Макрос → Редактор Visual Basic (Tools → Macro → Visual Basic Editor) (сочетание клавиш Alt/Option+FH) и затем выберите команду Insert → Module. Введите код, приведенный в листинге 4.1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Листинг 4.1
Sub GetCount()
Dim Pt As PivotTable
Dim strField As String
    strField = Selection.Cells(1, 1).Text
        Range(Selection, Selection.End(xlDown)).Name = "Items"
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
                SourceData:="=Items").CreatePivotTable TableDestination:="", _
                TableName:="ItemList"
    Set Pt = ActiveSheet.PivotTables("ItemList")
        ActiveSheet.PivotTableWizard TableDestination:=Cells(3, 1)
        Pt.AddFields RowFields:=strField
        Pt.PivotFields(strField).Orientation = xlDataField
End Sub

Чтобы вернуться в Excel, закройте окно Script или нажмите сочетание клавиш Alt/Apple+Q и сохраните рабочую книгу. Перед запуском этого кода выделите заголовок списка и удостоверьтесь, что список не содержит пустых ячеек.
[stextbox id=»warning»]Чтобы быстро удалить пустые ячейки, можно отсортировать список. (PivotTable Field) и Макет (PivotTable Layout)[/stextbox]
Код автоматически создаст именованный диапазон на основе вашего списка и присвоит ему имя Items. Затем он создаст на новом листе сводную таблицу, основываясь на данном именованном диапазоне. В следующий раз, когда у вас появится длинный список данных, вы сможете просто выделить его заголовок и запустить этот макрос. Вся работа по настройке сводной таблицы будет выполнена в мгновение ока.

Понравилась статья? Поделить с друзьями:
  • Макросы excel для предприятия
  • Макрос цвет шрифта word
  • Макрос фильтрации столбца в excel
  • Макросы excel для построения диаграмм
  • Макросы excel для новичков