Макросы в эксель для чайников
Содержание:
- Цикл FOR
- Макрос Excel: пример 4
- Создание «умной» таблицы
- Добавление
- Цикл FOR
- 10) Защита электронных таблиц с логином и паролем
- Запуск макроса при открытии листа
- Узнайте больше о Excel
- Записываем первый свой макрос
- Примеры возможностей макросов с описанием кодов
- Синтаксис макроса
- Как запустить макрос
- Понятие макроса
- Метод 1: Записываем макрос в автоматическом режиме
- Запись макроса
- Создание макроса – практический пример
- Личная книга макросов
- Синтаксис макроса
- Выполнение макроса в Excel
Цикл FOR
В следующем примере Вы увидите, как использовать цикл FOR. Цикл FOR позволяет нам выполнить повторение цикла с разными значениями. Давайте посмотрим, как можно заполнить числами от 1 до 5 ячейки A1:A5.
Для этого на вкладке Developer (Разработчик) нажмите Visual Basic. Дважды кликните по объекту из списка Microsoft Excel Objects, в котором должен быть сохранён макрос. Введите вот такой код:
Sub Macro1 () For n = 1 To 5 Cells(n, 1) = n Next n End Sub
Сохраните файл. Чтобы выполнить макрос, перейдите View > Macros > View Macros (Вид > Макросы > Макросы), выберите из списка название нужного макроса и нажмите Run (Выполнить).
Следующий код отображает фразу “Hello World” в окне сообщений Windows.
Sub MacroName() MsgBox ("Hello World!") End Sub
В следующем примере мы создаём сообщение с выбором Yes (Да) или No (Нет). Если выбрать вариант Yes (Да), то значение ячейки будет удалено.
Sub MacroName() Dim Answer As String Answer = MsgBox("Are you sure you want to delete the cell values ?", vbQuestion + vbYesNo, "Delete cell") If Answer = vbYes Then ActiveCell.ClearContents End If End Sub
Давайте проверим этот код. Выделите ячейку и запустите макрос. Вам будет показано вот такое сообщение:
Если Вы нажмёте Yes (Да), значение в выделенной ячейке будет удалено. А если No (Нет) – значение сохранится.
Макрос Excel: пример 4
В этом примере процедура Sub считывает значения из столбца A рабочего листа Лист2 и выполняет с ними арифметические операции. Результаты заносятся в ячейки столбца A на активном рабочем листе. В этом макросе продемонстрировано использование объектов Excel. В частности, производится обращение процедурой Sub к объекту Columns, и показано, как доступ к этому объекту осуществляется через объект Worksheet. Показано так же, что при обращении к ячейке или диапазону ячеек на активном листе, имя этого листа при записи ссылки указывать не обязательно.
'Процедура Sub при помощи цикла считывает значения в столбце A рабочего листа Лист2, 'выполняет с каждым значением арифметические операции и записывает результат в 'столбец A активного рабочего листа (Лист1) Sub Transfer_ColA() Dim i As Integer Dim Col As Range Dim dVal As Double 'Присваиваем переменной Col столбец A рабочего листа Лист 2 Set Col = Sheets("Лист2").Columns("A") i = 1 'При помощи цикла считываем значения ячеек столбца Col до тех пор, 'пока не встретится пустая ячейка Do Until IsEmpty(Col.Cells(i)) 'Выполняем арифметические операции над значением текущей ячейки dVal = Col.Cells(i).Value * 3 - 1 'Следующая команда записывает полученный результат в столбец A активного рабочего листа 'Имя листа в ссылке указывать нет необходимости, так как это активный лист. Cells(i, 1) = dVal i = i + 1 Loop End Sub
Создание «умной» таблицы
Создается «умная» таблица Excel с помощью следующего кода:
1 |
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).
Добавление
Как видно из комментариев к этой статье, у некоторых пользователей приложения Excel при создании макроса в выпадающем списке «Сохранить в» отсутствует пункт «Личная книга макросов».
В этом случае можно попытаться найти с помощью поиска в проводнике папку XLSTART и, если она будет найдена, вставить в нее пустой файл PERSONAL.XLSB. В данном случае «пустой» означает «без пользовательских процедур (макросов)».
Скачать архив с пустым файлом PERSONAL.XLSB (создан в Excel 2016).
После добавления файла PERSONAL.XLSB в папку XLSTART и перезагрузки приложения Excel, Личная книга макросов появится в проводнике редактора VBA. Перезагрузка Excel заключается в закрытии всех открытых рабочих книг и последующем открытии любого файла этой программы.
Цикл FOR
В следующем примере Вы увидите, как использовать цикл FOR. Цикл FOR позволяет нам выполнить повторение цикла с разными значениями. Давайте посмотрим, как можно заполнить числами от 1 до 5 ячейки A1:A5.
Для этого на вкладке Developer (Разработчик) нажмите Visual Basic. Дважды кликните по объекту из списка Microsoft Excel Objects, в котором должен быть сохранён макрос. Введите вот такой код:
Sub Macro1 () For n = 1 To 5 Cells(n, 1) = n Next n End Sub
Сохраните файл. Чтобы выполнить макрос, перейдите View > Macros > View Macros (Вид > Макросы > Макросы), выберите из списка название нужного макроса и нажмите Run (Выполнить).
Следующий код отображает фразу “Hello World” в окне сообщений Windows.
Sub MacroName() MsgBox ("Hello World!") End Sub
В следующем примере мы создаём сообщение с выбором Yes (Да) или No (Нет). Если выбрать вариант Yes (Да), то значение ячейки будет удалено.
Sub MacroName() Dim Answer As String Answer = MsgBox("Are you sure you want to delete the cell values ?", vbQuestion + vbYesNo, "Delete cell") If Answer = vbYes Then ActiveCell.ClearContents End If End Sub
Давайте проверим этот код. Выделите ячейку и запустите макрос. Вам будет показано вот такое сообщение:
Если Вы нажмёте Yes (Да), значение в выделенной ячейке будет удалено. А если No (Нет) – значение сохранится.
10) Защита электронных таблиц с логином и паролем
Если вы прочитали это далеко, нет ничего более справедливого, чем удивление еще одним пунктом в этом списке. И это макрос, к которому вы можете получить доступ прямо сейчас. Многим людям трудно ограничить данные в электронной таблице, когда они делятся ими с партнерами, сотрудниками и т. Д.
Вот почему мы создали макрос готов ограничить вкладки с помощью логина и пароля в таблицах, Вы можете создавать пользователей и определять, что они могут получить доступ в определенных листах. Смотрите примеры ниже:
Это всего лишь несколько примеров макросов, которые вы можете использовать ежедневно
Помните, что каждый макрос – это мини-программа, поэтому важно соблюдать осторожность, чтобы не запускать какие-либо макросы, особенно если они имеются в сторонних таблицах
А вы уже используете какой-нибудь макрос в повседневной жизни? Поделитесь с нами своим опытом, оставив комментарий или связавшись!
Вы сомневаетесь? Заходи LUZ Excel Forum и отправьте свой вопрос!
Запуск макроса при открытии листа
Workbook_SheetActivate — событие, происходящее при открытии любого листа в книге.
Visual Basic
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
‘код макроса
End Sub
1 |
PrivateSubWorkbook_SheetActivate(ByValSh AsObject) ‘код макроса EndSub |
При этом макрос будет работать при открытии любого листа в данной книге.
Если же необходимо обработать событие для какого-то конкретного листа книги, то нужно выбрать модуль с названием данного листа:
Модуль листа
WorksheetActivateCalculate
Worksheet_Activate — событие, происходящее при активации листа в книге.
Visual Basic
Private Sub Worksheet_Activate()
‘код макроса
End Sub
1 |
PrivateSubWorksheet_Activate() ‘код макроса EndSub |
Другие основные обрабатываемые события для листа:
- Activate — событие, происходящее при активации листа;
- BeforeDoubleClick — событие, происходящее по двойному щелчку по любой ячейке листа;
- BeforeRightClick — событие, происходящее при нажатии правой кнопки мыши на любой ячейке листа;
- Calculate — событие, происходящее при пересчете формул на листе;
- Change — событие, происходящее при изменении значений ячеек на листе;
- Deactivate — событие, происходящее при переходе на другой лист книги;
- FollowHyperlink — событие, происходящее при переходе по гиперссылке на листе;
- SelectionChange — событие, происходящее при изменении адреса выделенной области.
Удачи вам и до скорых встреч на страницах блога Tutorexcel.ru!
Узнайте больше о Excel
Только что, вы узнали, как записать макросы в Excel, но Excel может сделать гораздо больше. Электронные таблицы могут придать ощущение организованности и структурированности вашего проекта. Более того, макрос в Excel может помочь вам автоматизировать повторяющиеся задачи и скучную работу. Потратьте некоторое время на размышления о том, какие задачи вы выполняете снова и снова, а затем попытайтесь создать макрос для их решения.
Excel — это мощный инструмент, который имеет множество применений. Ознакомьтесь с уроками, приведёнными ниже, чтобы узнать больше вариантов работы с данными в Excel и приручить электронные таблицы:
Какие ваши любимые инструменты для экономии времени в Excel? Используете ли вы макросы или другие инструменты для работы с данными, чтобы ваша работа с электронными таблицами была выполнимой? Дайте мне знать в разделе комментариев ниже и поделитесь любимым советом с вашим приятелем, читателем Envato Tuts+.
Записываем первый свой макрос
На странице «Сводный» делаем шаблон исходной таблицы (смотреть рисунок).
Единственное, что надо знать для написания программы в excel — как включить макросы. По ряду существенных причин по умолчанию они отключены. На панели вкладок находим закладку «Вид» и активируем её. Если в базовой версии такой вкладки нет, то добавляем. На всплывающей панели активируем функцию «Макросы». Активируем кнопку «Запись Макроса». Теперь любое действие с таблицей будет фиксироваться и записываться в виде специальных кодов.
Выбираем имя, например «Склад».
- Назначаем сочетание клавиш, активирующих программу – «Ctrl +Я».
- Выбираем сохранить в таблице – «Эта книга».
- Описание – «Сортировка данных кладовщиков».
- Подтверждаем клавишей OK (результат действий приведён на рис.).
Кликом «Остановить запись» прекращается работа. С этого момента, все действия с таблицей будут запоминаться и изменив начальные данные их можно повторить.
Используя стандартные операции и формулы заполняем шаблон (на рис. ниже приведена получившаяся форма).
Завершаем запись. Теперь при всех изменениях исходных данных, нажатием клавиш «Ctrl +Я», будут меняться значения в таблице-шаблоне. Даже на очень простом примере видно, как написать макрос в excel 2007.
Чтобы использовать такую макрокоманду, таблицу очищают от исходных данных и файл сохраняют в формате, поддерживающем макрокоманды. Разработано три основных формата:
- XLSM, в отличие от стандартного варианта XLSX, таблица с таким расширением поддерживает макрокоманды.
- XLSB обычно используется для больших таблиц и хранит информацию в бинарном формате.
- XLTM для идентификации шаблонов с поддержкой макрокоманд.
Примеры возможностей макросов с описанием кодов
Макрос для объединения одинаковых ячеек в таблице Excel.Исходный код макроса для одновременного поиска и объединения ячеек с одинаковыми значениями в таблице. Работа со свойством Merge.
Макрос для объединения пустых ячеек в строках таблицы Excel.Исходный код макроса для объединения всех пустых ячеек во всех строках таблицы Excel по горизонтали. Как автоматически объединить все пустые ячейки?
Макрос для объединения всех пустых ячеек в таблице Excel.Пример как автоматически убрать пустые ячейки с помощью их объединения с использованием макроса. Автоматизированное форматирование больших таблиц.
Как разъединить объединенные ячейки в Excel используя макрос.Как автоматически отменить объединение для всех выделенных ячеек по строкам и столбцам сохранив и заполнив текст, которых содержится в них?
Как объединить столбцы в Excel используя макрос.Автоматическое горизонтальное объединение всех выделенных ячеек по столбцам таблицы с помощью VBA макроса. Как одновременно объединить ячейки в нескольких выделенных диапазонах?
Как объединить ячейки в Excel с помощью кода макроса VBA.Как можно быстро объединять ячейки для таблиц со сложной структурой используя простые макросы? Пример готового VBA кода макроса для объединения ячеек.
Как запустить макрос в Excel разными способами.Как выполнить макрос с помощью кнопки, панели быстрого запуска и стандартными средствами на панели инструментов РАЗРАБОТЧИК?
Личная книга макросов в Excel и как ее использовать.Работа с личной книгой макросов и краткий обзор ее преимуществ. Где находиться личная книга макросов и как записывать в нее свои макросы?
Как создать и добавить надстройку в Excel с кодом VBA.Практическое пошаговое руководство по созданию надстроек с VBA кодом программ макросов. Управление, редактирование и удаление надстроек из программы.
Как написать макрос в Excel на языке программирования VBA.Как создать макрос с помощью редактора кода языка программирования Visual Basic for Application? Краткий обзор основных возможностей макросов.
Синтаксис макроса
Макросы — это команды, написанные на языке VBA (Visual Basic for Applications). И синтаксис кода макроса не отличается от записи кода в Visual Basic.
Любой макрос имеет следующий вид:
Sub Имя_Макроса_Без_Пробелов()
‘ комментарии к макросу — они нужны для вас, VBA не воспринимает такие строки как команды
команды, написанные на языке VBA
End Sub
3 обязательных блока макроса:
1. Начало макроса. Всегда начинается с команды Sub. Далее идет имя макроса — оно может быть на русском языке, но не должно содержать пробелы и специальные символы.
В конце имени макроса всегда ставятся скобки () — они нужны, когда вы создаете свою функцию, в них указываются аргументы функции, но об этом сейчас речь не пойдет.
2. Блок команд. В нашем примере он состоит из одной строки: Selection.NumberFormat = «#,##0»
Каждая команда должна начинаться с новой строки. Если текст команды очень длинный и не помещается на экране, его можно разбить на несколько строк, заканчивая строку символом нижнего подчеркивания _ (далее в примере мы это увидим).
3. Конец макроса. Всегда обозначается как End Sub.
Есть и один необязательный блок — это комментарии, которые вы можете оставлять в любом месте внутри кода макроса, поставив перед началом комментариев знак апострофа ‘. Например, вы можете описать, что именно делает тот или иной макрос.
Обратите внимание!
Если вы хотите разместить комментарии в несколько строк, каждую новую строку надо начинать с апострофа.
Теперь запишем более сложный макрос и научимся понимать текст его кода.
Например, информационная система выдает отчет «Бюджет на месяц» без выделения групповых значений цветом или шрифтом.
Нам необходимо:
- выделить групповые строки полужирным шрифтом;
- отформатировать на печать — расположить отчет по центру листа, задать масштаб 75 %, вывести в колонтитулы название отчета (рис. 4).
Рис. 4. Изменения после написания макроса
Запишем алгоритм форматирования отчета в макрос.
Нажимаем кнопку записи макроса и выполняем следующие действия:
- Даем макросу имя Форматирование_БДР, в блоке описания записываем, что будет делать этот макрос (например, Выделяет жирным курсивом итоги, форматирует на печать). Жмем Ок.
- Выделяем столбцы А:С, ставим автофильтр — на закладке Данные находим кнопку Фильтр.
- По столбцу КОД задаем условие не содержит точку: Текстовые фильтры — Не содержит и в поле текста ставим символ точки без пробелов (рис. 5).
Рис. 5. Использование автофильтра по столбцу «КОД»
- Выделяем отфильтрованный диапазон и задаем ему полужирный шрифт.
- Снимаем автофильтр (повторное нажатие на закладке Данные кнопки Фильтр).
- Заходим в меню форматирования на печать (Кнопка Файл/Office — Печать — Предварительный просмотр — Параметры страницы) и задаем там три параметра:
1) на вкладке Страница задаем масштаб 75 %;
2) на вкладке Поля отмечаем пункт Горизонтально в блоке Центрировать на странице;
3) на вкладке Колонтитулы создаем верхний колонтитул с текстом Бюджет на январь.
- Выходим из параметров страницы.
- Заканчиваем запись макроса.
- Нажимаем Alt+F11 и смотрим, что получилось (см. рис. 4).
Код этого макроса уже гораздо длиннее и непонятнее, но легко читаем для знающих английский язык и азы программирования в VBA.
Как запустить макрос
Существует несколько проверенных способов запуска добавленных или созданных алгоритмов действий в Excel. Самый простой метод – запуск макроса через VBA:
- Зайти во вкладку “Разработчик” на главной панели с инструментами.
- Перейти в панель с инструментами “Код”, нажать на кнопку “Макросы”.
- Из открывшегося окна нужно выбрать требуемый алгоритм с помощью ЛКМ, нажать на кнопку “Выполнить”.
После этого алгоритм будет выполняться. Активация макроса через комбинацию клавиш:
- Необходимо зайти в окно с готовыми или добавленными алгоритмами действий точно так же, как было описано в способе выше.
- Перейти во вкладку “Параметры” которая расположена в правой части появившегося окна.
- Откроется еще одно окно, в котором можно настроить алгоритм.
Среди доступных параметров необходимо выбрать поле для добавления комбинации клавиш, с помощью которой можно будет вызывать макрос.
Запуска алгоритма через панель быстрого доступа:
- На панели быстрого доступа найти значок стрелки, направленной вниз.
Добавление макроса в панель быстрого доступа
- Из открывшегося списка выбрать функцию “Другие команды”. Должно появиться окно с параметрами Excel.
- Из списка в левой стороне зайти во вкладку “Выбрать команду”. Нажать на функцию “Макросы”.
- Далее необходимо выбрать желаемый алгоритм действий.
Доступный список изображений для значка быстрого доступа к алгоритму действий
На панели быстрого доступа перед стрелкой вниз должен появиться произвольный значок выбранного макроса. Его можно изменить через настройки. Чтобы сохранить установленные параметры, необходимо нажать кнопку “ОК”.
Понятие макроса
Термин «Макрос» слышало множество людей. Нередко при запуске таблицы появляется предупреждение: “Этот документ использует макросы, способные навредить данному компьютеру, поэтому они отключены с целью защиты от вредоносных действий”.
Макрос – действенный способ автоматизировать самые частые действия, которые нужно выполнять в электронных таблицах. Макросы – это разновидность программирования. Разработка этих подпрограмм осуществляется с помощью языка VBA. Впрочем, некоторые виды макросов не требуют навыков программирования. Ведь существует еще такое понятие, как макрорекордер. Достаточно его включить и совершить некоторые действия, как далее они будут повторяться по нажатию одной кнопки.
Макросы могут быть реально опасными. Поскольку при их написании используется язык программирования, с его помощью можно создать настоящий вирус, который способен повредить информацию, а также собирать данные для злоумышленников (особенно опасно, если в таблице есть банковские данные, пароли и так далее).
Также макрос может запустить реальную троянскую программу на компьютере. Поэтому, чтобы не допустить вредоносных действий со стороны стороннего макроса, не стоит запускать макросы из сторонних источников, которым не доверяют.
Значительно проще объяснить, зачем нужны макросы, на реальном примере. Например, необходимо каждый день удалять из электронной таблицы несколько столбцов, а потом добавлять новые строки. Это невероятно утомительное занятие, отнимающее много времени. Если же воспользоваться макросами, есть реальная возможность значительно его сэкономить.
Макросы можно запускать по нажатию определенной комбинации клавиш. Например, если нажать Ctrl+J, можно запустить подпрограмму.
Интересный факт: известная программа бухгалтерского учета 1C изначально очень напоминала Excel, но потом ее функционал расширился до текущего.
Если же нужно давать компьютеру сложные инструкции, можно воспользоваться редактором Visual Basic, примеры кода в котором мы и рассмотрим немного позже.
Метод 1: Записываем макрос в автоматическом режиме
Чтобы иметь возможность записать макросы автоматически, для начала нужно их активировать в параметрах Эксель.
Узнать, как это можно сделать, можно в нашей статье – “Как включать и отключать макросы в Excel”.
После того, как макросы включены, можно перейти к нашей основной задаче.
- Переключаемся во вкладку “Разработчик”. В группе инструментов “Код” щелкаем по значку “Записать макрос”.
- На экране появится окошко, в котором мы можем выполнить настройки записи. Здесь указывается:
- имя макроса – любое, но должно начинаться с буквы (не с цифры), не допускаются пробелы.
- комбинация клавиш, которая будет использоваться для запуска макроса. Обязательной является Ctrl, а вторую мы можем назначить в специальном поле. Допустим, пусть это будет клавиша “r”. Если нужно использовать заглавную букву, нужно зажать клавишу Shift, которая будет добавлена в сочетание клавиш.
- место хранения макроса. Стандартно – это будет текущая книга, но, если требуется, можно выбрать новую книгу или личную книгу макросов. В нашем случае оставляем стандартный вариант.
- При желании можно добавить описание к макросу.
- По готовности кликаем OK.
- Теперь в созданный макрос будут записываться все действия, которые мы будем выполнить в книге. И так до тех пор, пока мы не остановим запись.
- Допустим, давайте давайте в ячейке D2 выполним умножение двух ячеек (B2 и B3): =B2*B3 .
- После того, как выражение готово, нажимаем клавишу Enter, чтобы получить результат. Затем останавливаем запись макроса, нажав на значок “Стоп” (появилась вместо кнопки “Записать макрос”) в группе инструментов “Код”.
Запись макроса
Excel 2007-2016
На ленте во вкладке «Разработчик» нажмите кнопку «Запись макроса».
Excel 2000-2003
Пройдите по пунктам меню «Сервис» — «Макрос» — «Начать запись».
Откроется окно:
Окно «Запись макроса»
Имя макроса: можно изменить или оставить по умолчанию («Макрос» с очередным номером). Если у вас уже есть макрос с таким именем, он будет записан в новый программный модуль, который будет создан автоматически.
Сочетание клавиш: добавьте букву, если хотите запускать макрос сочетанием клавиш Ctrl+«буква». В какой раскладке вы впишите букву (например, «й» или «q»), в той и будет запускаться макрос. Если буква будет вписана в верхнем регистре («Й» или «Q»), используйте для запускa макроса сочетание клавиш Ctrl+Shift+«буква».
Сохранить в: выберите книгу, в которой должен быть сохранен макрос:
- «Эта книга» — макрос будет записан в книге, из которой рекордер был запущен (нажата кнопка «Запись макроса»).
- «Новая книга» — откроется новая книга и макрос будет записан в ней.
- «Личная книга макросов» — макрос запишется в Личную книгу макросов и будет доступен из всех открытых книг Excel.
Описание: здесь можно добавить краткое описание макроса, которое будет отображаться в окне доступных макросов при выделении его в списке.
Заполнив окно, нажимаем кнопку «OK», кнопка «Запись макроса» меняет свое название на «Остановить запись», и можно приступать, собственно, к записи макроса. Выполните на рабочем листе операции, последовательность которых вы хотите автоматизировать и, после их завершения, нажмите кнопку «Остановить запись». Макрос будет записан и появится в списке макросов.
Создание макроса – практический пример
Для примера возьмём самый обычный файл CSV. Это простая таблица 10х20, заполненная числами от 0 до 100 с заголовками для столбцов и строк. Наша задача превратить этот набор данных в презентабельно отформатированную таблицу и сформировать итоги в каждой строке.
Как уже было сказано, макрос – это код, написанный на языке программирования VBA. Но в Excel Вы можете создать программу, не написав и строчки кода, что мы и сделаем прямо сейчас.
Чтобы создать макрос, откройте View (Вид) > Macros (Макросы) > Record Macro (Запись макроса…)
Дайте своему макросу имя (без пробелов) и нажмите ОК.
Начиная с этого момента, ВСЕ Ваши действия с документом записываются: изменения ячеек, пролистывание таблицы, даже изменение размера окна.
Excel сигнализирует о том, что включен режим записи макроса в двух местах. Во-первых, в меню Macros (Макросы) – вместо строки Record Macro (Запись макроса…) появилась строка Stop Recording (Остановить запись).
Во-вторых, в нижнем левом углу окна Excel. Иконка Стоп (маленький квадратик) указывает на то, что включен режим записи макроса. Нажатие на неё остановит запись. И наоборот, когда режим записи не включен, в этом месте находится иконка для включения записи макроса. Нажатие на неё даст тот же результат, что и включение записи через меню.
Теперь, когда режим записи макроса включен, давайте займёмся нашей задачей. Первым делом, добавим заголовки для итоговых данных.
Далее, введите в ячейки формулы в соответствии с названиями заголовков (даны варианты формул для англоязычной и русифицированной версии Excel, адреса ячеек – всегда латинские буквы и цифры):
- =SUM(B2:K2) или =СУММ(B2:K2)
- =AVERAGE(B2:K2) или =СРЗНАЧ(B2:K2)
- =MIN(B2:K2) или =МИН(B2:K2)
- =MAX(B2:K2) или =МАКС(B2:K2)
- =MEDIAN(B2:K2) или =МЕДИАНА(B2:K2)
Теперь выделите ячейки с формулами и скопируйте их во все строки нашей таблицы, потянув за маркер автозаполнения.
После выполнения этого действия в каждой строке должны появиться соответствующие итоговые значения.
Далее, мы подведем итоги для всей таблицы, для этого делаем ещё несколько математических действий:
Соответственно:
- =SUM(L2:L21) или =СУММ(L2:L21)
- =AVERAGE(B2:K21) или =СРЗНАЧ(B2:K21) – для расчёта этого значения необходимо взять именно исходные данные таблицы. Если взять среднее значение из средних по отдельным строкам, то результат будет другим.
- =MIN(N2:N21) или =МИН(N2:N21)
- =MAX(O2:O21) или =МАКС(O2:O21)
- =MEDIAN(B2:K21) или =МЕДИАНА(B2:K21) – считаем, используя исходные данные таблицы, по причине указанной выше.
Теперь, когда с вычислениями закончили, займёмся форматированием. Для начала для всех ячеек зададим одинаковый формат отображения данных. Выделите все ячейки на листе, для этого воспользуйтесь комбинацией клавиш Ctrl+A, либо щелкните по иконке Выделить все, которая находится на пересечении заголовков строк и столбцов. Затем нажмите Comma Style (Формат с разделителями) на вкладке Home (Главная).
Далее, изменим внешний вид заголовков столбцов и строк:
- Жирное начертание шрифта.
- Выравнивание по центру.
- Заливка цветом.
И, наконец, настроим формат итоговых значений.
Вот так это должно выглядеть в итоге:
Если Вас все устраивает, остановите запись макроса.
Поздравляем! Вы только что самостоятельно записали свой первый макрос в Excel.
Чтобы использовать созданный макрос, нам нужно сохранить документ Excel в формате, который поддерживает макросы. Для начала необходимо удалить все данные из созданной нами таблицы, т.е. сделать из неё пустой шаблон. Дело в том, что в дальнейшем, работая с этим шаблоном, мы будем импортировать в него самые свежие и актуальные данные.
Чтобы очистить все ячейки от данных, щёлкните правой кнопкой мыши по иконке Выделить все, которая находится на пересечении заголовков строк и столбцов, и из контекстного меню выберите пункт Delete (Удалить).
Теперь наш лист полностью очищен от всех данных, при этом макрос остался записан. Нам нужно сохранить книгу, как шаблон Excel с поддержкой макросов, который имеет расширение XLTM.
Важный момент! Если Вы сохраните файл с расширением XLTX, то макрос в нём работать не будет. Кстати, можно сохранить книгу как шаблон Excel 97-2003, который имеет формат XLT, он тоже поддерживает макросы.
Когда шаблон сохранён, можно спокойно закрыть Excel.
Личная книга макросов
По умолчанию Excel не отображает личную книгу макросов. Чтобы убедиться, что она открыта, выбираем на вкладке Вид кнопку Отобразить — в появившемся окне должна быть книга под именем PERSONAL.
Мы убедились, что книга открыта, но отображать ее не будем, чтобы потом по ошибке не закрыть ее. По сути, в этой книге нас интересует так называемый Исходный текст — блок, в котором записываются макросы. Чтобы увидеть это окно, нажмите клавиши Alt+F11 или кликните правой кнопкой мыши на ярлыке любого листа Excel и выберите в контекстном меню Исходный текст. Откроется окно VBA-кодирования в Excel (рис. 3). Оно состоит из двух блоков:
1. В левой части экрана окно Project – VBAProject — это проводник, в котором отображаются все открытые в данный момент книги Excel (даже если вы их не видите, как, например, книгу Personal). Работа с этим блоком аналогична работе в обычном проводнике — двойной клик по наименованию книги раскрывает ее содержимое. Нас интересует блок Modules – Module1. Кликаем левой кнопкой мыши дважды по этому объекту.
2. В правой части экрана откроется блок записи и редактирования макросов. Здесь уже автоматически записался Макрос1. Рассмотрим на его примере основную канву макроса.
Рис. 3. Окно VBA-кодирования в Excel
Синтаксис макроса
Макросы — это команды, написанные на языке VBA (Visual Basic for Applications). И синтаксис кода макроса не отличается от записи кода в Visual Basic.
Любой макрос имеет следующий вид:
Sub Имя_Макроса_Без_Пробелов()
‘ комментарии к макросу — они нужны для вас, VBA не воспринимает такие строки как команды
команды, написанные на языке VBA
End Sub
3 обязательных блока макроса:
1. Начало макроса. Всегда начинается с команды Sub. Далее идет имя макроса — оно может быть на русском языке, но не должно содержать пробелы и специальные символы.
В конце имени макроса всегда ставятся скобки () — они нужны, когда вы создаете свою функцию, в них указываются аргументы функции, но об этом сейчас речь не пойдет.
2. Блок команд. В нашем примере он состоит из одной строки: Selection.NumberFormat = “#,##0”
Каждая команда должна начинаться с новой строки. Если текст команды очень длинный и не помещается на экране, его можно разбить на несколько строк, заканчивая строку символом нижнего подчеркивания _ (далее в примере мы это увидим).
3. Конец макроса. Всегда обозначается как End Sub.
Есть и один необязательный блок — это комментарии, которые вы можете оставлять в любом месте внутри кода макроса, поставив перед началом комментариев знак апострофа ‘. Например, вы можете описать, что именно делает тот или иной макрос.
Обратите внимание!
Если вы хотите разместить комментарии в несколько строк, каждую новую строку надо начинать с апострофа.
Теперь запишем более сложный макрос и научимся понимать текст его кода.
Например, информационная система выдает отчет «Бюджет на месяц» без выделения групповых значений цветом или шрифтом.
Нам необходимо:
- выделить групповые строки полужирным шрифтом;
- отформатировать на печать — расположить отчет по центру листа, задать масштаб 75 %, вывести в колонтитулы название отчета (рис. 4).
Рис. 4. Изменения после написания макроса
Запишем алгоритм форматирования отчета в макрос.
Нажимаем кнопку записи макроса и выполняем следующие действия:
- Даем макросу имя Форматирование_БДР, в блоке описания записываем, что будет делать этот макрос (например, Выделяет жирным курсивом итоги, форматирует на печать). Жмем Ок.
- Выделяем столбцы А:С, ставим автофильтр — на закладке Данные находим кнопку Фильтр.
- По столбцу КОД задаем условие не содержит точку: Текстовые фильтры – Не содержит и в поле текста ставим символ точки без пробелов (рис. 5).
Рис. 5. Использование автофильтра по столбцу «КОД»
- Выделяем отфильтрованный диапазон и задаем ему полужирный шрифт.
- Снимаем автофильтр (повторное нажатие на закладке Данные кнопки Фильтр).
- Заходим в меню форматирования на печать (Кнопка Файл/Office – Печать – Предварительный просмотр – Параметры страницы) и задаем там три параметра:
1) на вкладке Страница задаем масштаб 75 %;
2) на вкладке Поля отмечаем пункт Горизонтально в блоке Центрировать на странице>;
3) на вкладке Колонтитулы создаем верхний колонтитул с текстом Бюджет на январь.
- Выходим из параметров страницы.
- Заканчиваем запись макроса.
- Нажимаем Alt+F11 и смотрим, что получилось (см. рис. 4).
Код этого макроса уже гораздо длиннее и непонятнее, но легко читаем для знающих английский язык и азы программирования в VBA.
Выполнение макроса в Excel
Прежде чем раскрыть все возможности созданного Вами макроса, считаю правильным обратить внимание на пару важных моментов, касающихся макросов в целом:
- Макрос может нанести вред.
- Ещё раз прочти предыдущий пункт.
VBA-код обладает очень большими возможностями. В частности, он может выполнять операции с файлами за пределами текущего документа. Например, макрос может удалять или изменять любые файлы в папке Мои документы. По этой причине запускайте и разрешайте выполнение макросов только из источников, которым Вы доверяете.
Чтобы запустить наш макрос, форматирующий данные, откройте файл шаблона, который мы создали в первой части этого урока. Если у Вас стандартные настройки безопасности, то при открытии файла сверху над таблицей появится предупреждение о том, что запуск макросов отключен, и кнопка, чтобы включить их выполнение. Так как шаблон мы сделали самостоятельно и себе мы доверяем, то нажимаем кнопку Enable Content (Включить содержимое).
Следующим шагом, мы импортируем последний обновлённый набор данных из файла CSV (на основе такого файла мы создавали наш макрос).
При выполнении импорта данных из CSV-файла, возможно, Excel попросит Вас настроить некоторые параметры для правильной передачи данных в таблицу.
Когда импорт будет закончен, зайдите в меню Macros (Макросы) на вкладке View (Вид) и выберите команду View Macros (Макросы).
В открывшемся диалоговом окне мы увидим строку с именем нашего макроса FormatData. Выберите его и нажмите Run (Выполнить).
Когда макрос начнёт работать, Вы увидите, как табличный курсор прыгает с ячейки на ячейку. Через несколько секунд с данными будут проделаны те же операции, что и при записи макроса. Когда всё будет готово, таблица должна выглядеть так же, как и оригинал, который мы форматировали вручную, только с другими данными в ячейках.