Script excel что это

Содержание

  • 1 Excel VBA Macro script
  • 2 Создаем собственную библиотеку Excel макросов — Personal.xlsb
      • 2.0.1 Чуть-чуть лирики
      • 2.0.2 Собственно, код
  • 3 Что такое VBA
  • 4 Объекты, коллекции, свойства и методы
  • 5 Как начать
  • 6 Макросы в Excel
  • 7 Пример 1
  • 8 Пример 2
  • 9 Пример 3
  • 10 Пример 4
      • 10.0.1 Первый способ. Скрипт «от руки».
      • 10.0.2 Второй способ. Скрипт продаж в офисных программах (Excel, Word и тд)
      • 10.0.3 Третий способ. Специальные сервисы «Конструкторы скриптов продаж»
      • 10.0.4 Полезные ссылки: 

В процессе работы неоднократно приходиться сталкиваться с табличными процессорами типа Excel. И хотя это не совсем САПР, но информацию в рамках BIM контекста хочешь не хочешь, а приходится обрабатывать, либо с помощью Базы Данных, либо в тех самых экселевских табличках. А лучше и так и эдак.

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

Excel VBA Macro script

Макросы в экселе пишут на VBA (Visual Basic Advance) — слегка переработанный под нужды офисного пакета старый добрый  Бейсик, со всеми своими достоинствами и недостатоками.  Сами программы по умолчанию являются частью эксель файла. И убедится в этом можно с помощью соответствующей консоли (Microsoft Visual Basic for Application)

Добраться до них можно в любое время нажав сочетание клавишь Alt+F11

Но сначала надо включить вкладку Developers в стандартной ленте экселя.

как сделать скрипт в excel

Для этого:

  1. Ннаводим курсор на ленту и нажимаем Правую Клавишу Мыши (ПКМ)
  2. В открывшемся списке выбираем — Customize the Ribbon (Настройка Ленты)
  3. Ищем как показано на скриншоте пункт Developer (Разработка) и нажимаем чтобы появилась галочка
  4. Ок.

Путем этих не хитрых манипуляций мы получили доступ к панели разработчика в Excel — не будем особо заострять на ней внимание. Нам там понадобится буквально несколько кнопок

— Visual Basic — собственно уже обусжденная выше консоль для работы со скриптами.

— Macos — список доступных макросов для использования.

— Record Macro — эта кнопка позволяет включить запись ваших  действий с табличным редактором.

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

Однако есть нюанс. Созданный макроскрипт будет по умолчанию доступен только в одном эксель файле. Скопировать его в другой — конечно можно, но довольно заморочно. Есть ли выход из этой ситуации? Конечно!

Создаем собственную библиотеку Excel макросов — Personal.xlsb

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

Собственно смотрим на картинку:

как сделать скрипт в excel
1. Необходимо включить макрос на запись.

2. В появившемся окне в выпадающем списке выбрать пункт — Personal Macro Workbook. Если такого файла не существует — он будет создан автоматические (то что нам и нужно)

3. Запускаем скрипт на запись

4. И останавливаем её.

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

Небольшой топик-шпаргалка для быстрого написания скриптов для автоматической обработки документов ms office’а. А так же для помощи в преодолении синдрома чистого листа.

Как правильно заметили в недавнем топике, сама работа скрипта может быть и не быстрой, но чаще важнее сам результат, да и объёмы далеко не всегда такие большие. Зато Automation позволяет написать скрипт практически на любом языке. Здесь я выдам заготовки для JavaScript и IronPython, но, надеюсь, в комментариях найдётся место и для других языков (например, на PowerShell).

Чуть-чуть лирики

Для работы через automation нужен следующий минимум:

  • MS Office (если есть документы, то он, видимо, есть/будет установлен)
  • Интерпретатор выбранного языка (для JS, VBS и PowerShell этот пункт не актуален)
  • Ещё раз MS Office для подглядывание за генерацией кода в VBA (в записываемых макросах)

Ещё раз повторюсь. Цель — быстро написать скрипт без сложных требований (производительность, встраивание, работа без ms office и т.п.).

Собственно, код

Имхо, самый разумный вариант — это JScript или VBScript (точнее Windows script host), т.к. интерпретатор уже идёт с операционной системой, и можно раздавать скрипт друзьям/коллегам, не требуя от них никаких дополнительных действий — перетащил xls(x)-файл на скрипт в explorer’е и работа пошла:

var excel = WScript.CreateObject("Excel.Application"); var fileName = WScript.Arguments.Item(0);  try { 	main(); } catch(e) { 	// Чтобы процесс не завис в памяти 	delete excel; 	throw e; }  function main() { 	//excel.Visible = true; // Иногда хочется поспать перед экраном, где что-то происходит, но так работает дольше 	//var book  = excel.Workbooks.Add();	// Новая книга (создать) 	var book  = excel.Workbooks.Open(fileName);	// Старая книга 	var sheet = book.Worksheets.Item(1);	// (в VBA нумерация с единицы)   	// Что-то делаем 	for (var i = 1; i  Macros -> Record macro..., имя значения не имеет), открываем его код (View -> Macros -> View macros...) и делаем по образу и подобию. Сама запись макроса — просто набор действий, которые хочется автоматизировать. Например, вставить или изменить какое-то значение, поменять цвет/шрифт и т.п. Запись макроса лучше производить в отдельном документе, во избежание.  Для лучшей ориентации в мире объектов объектном мире Excel — система классов (тоже самое, но для Office 2010).  Небольшой бонус: константы для цветовых индексов.  P.S. Где-то у меня был код для работы с Automation из C++, но это уже совсем другая история :)             

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

как сделать скрипт в excel

Что такое VBA

Программирование в Excel осуществляется посредством языка программирования Visual Basic for Application, который изначально встроен в самый известный табличный процессор от Microsoft.

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

Недостатком программы являются проблемы, связанные с совместимостью различных версий. Они обусловлены тем, что код программы VBA обращается к функциональным возможностям, которые присутствуют в новой версии продукта, но отсутствуют в старой. Также к минусам относят и чрезмерно высокую открытость кода для изменения посторонним лицом. Тем не менее Microsoft Office, а также IBM Lotus Symphony позволяют пользователю применять шифрование начального кода и установку пароля для его просмотра.

как сделать скрипт в excel

Объекты, коллекции, свойства и методы

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

Главным из них является Application, соответствующий самой программе Excel. Затем следуют Workbooks, Worksheets, а также Range. Например, для обращения к ячейке A1 на конкретном листе следует указать путь с учетом иерархии.

Что касается понятия «коллекция», то это группа объектов того же класса, которая в записи имеет вид ChartObjects. Ее отдельные элементы также являются объектами.

Следующее понятие — свойства. Они являются необходимой характеристикой любого объекта. Например, для Range — это Value или Formula.

Методы — это команды, показывающие, что требуется сделать. При написании кода в VBA их необходимо отделять от объекта точкой. Например, как будет показано в дальнейшем, очень часто при программировании в «Эксель» используют команду Cells(1,1).Select. Она означает, что необходимо выбрать ячейку с координатами (1,1) т.е. A1.

Вместе с ней нередко используется Selection.ClearContents. Ее выполнение означает очистку содержимого выбранной ячейки.

как сделать скрипт в excel

Как начать

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

Затем необходимо перейти в приложение VB, для чего достаточно воспользоваться комбинацией клавиш «Alt» и «F11». Далее:

  • в строке меню, расположенном в верхней части окна, нажимают на иконку рядом с иконкой Excel;
  • выбирают команду Mudule;
  • сохраняют, нажав на иконку с изображением floppy disk;
  • пишут, скажем так, набросок кода.

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

Sub program ()

‘Наш код

End Sub

Обратите внимание, что строка «’Наш код» будет выделена другим цветом (зеленым). Причина в апострофе, поставленном в начале строки, который обозначает, что далее следует комментарий.

Теперь вы можете написать любой код и создать для себя новый инструмент в VBA Excel (примеры программ см. далее). Конечно, тем, кто знаком с азами Visual Basic, будет намного проще. Однако даже те, кто их не имеет, при желании смогут освоиться достаточно быстро.

За таким названием скрываются программы, написанные на языке Visual Basic for Application. Таким образом, программирование в Excel — это создание макросов с нужным кодом. Благодаря этой возможности табличный процессор Microsoft саморазвивается, подстраиваясь под требования конкретного пользователя. Разобравшись с тем, как создавать модули для написания макросов, можно приступать к рассмотрению конкретных примеров программ VBA Excel. Лучше всего начать с самых элементарных кодов.

Пример 1

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

Для этого:

  • открывают вкладку «Вид»;
  • переходят на пиктограмму «Макросы»;
  • жмут на «Запись макроса»;
  • заполняют открывшуюся форму.

Для простоты в поле «Имя макроса» оставляют «Макрос1», а в поле «Сочетание клавиш» вставляют, например, hh (это значит, что запустить программку можно будет блиц-командой «Ctrl+h»). Нажимают Enter.

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

Далее:

  • вновь переходят на строку «Макросы»;
  • в списке выбирают «Макрос 1»;
  • нажимают «Выполнить» (то же действие запускается начатием сочетания клавиш «Ctrl+hh»).

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

Имеет смысл увидеть, как выглядит код. Для этого вновь переходят на строку «Макросы» и нажимают «Изменить» или «Войти». В результате оказываются в среде VBA. Собственно, сам код макроса находится между строками Sub Макрос1() и End Sub.

Если копирование было выполнено, например, из ячейки А1 в ячейку C1, то одна из строк кода будет выглядеть, как Range(“C1”).Select. В переводе это выглядит, как «Диапазон(“C1”).Выделить», иными словами осуществляет переход в VBA Excel, в ячейку С1.

Активную часть кода завершает команда ActiveSheet.Paste. Она означает запись содержания выделенной ячейки (в данном случае А1) в выделенную ячейку С1.

Пример 2

Циклы VBA помогают создавать различные макросы в Excel.

Циклы VBA помогают создавать различные макросы. Предположим, что имеется функция y=x + x2 + 3×3 – cos(x). Требуется создать макрос для получения ее графика. Сделать это можно только, используя циклы VBA.

За начальное и конечное значение аргумента функции берут x1=0 и x2=10. Кроме того, необходимо ввести константу — значение для шага изменения аргумента и начальное значение для счетчика.

Все примеры макросов VBA Excel создаются по той же процедуре, которая представлена выше. В данном конкретном случае код выглядит, как:

Sub programm()

x1 = 1

x2 = 10

shag = 0.1

i = 1

Do While x1 < x2 (цикл будет выполняться пока верно выражение x1 < x2)

y=x1 + x1^2 + 3*x1^3 – Cos(x1)

Cells(i, 1).Value = x1 (значение x1 записывается в ячейку с координатами (i,1))

Cells(i, 2).Value = y (значение y записывается в ячейку с координатами (i,2))

i = i + 1 (действует счетчик);

x1 = x1 + shag (аргумент изменяется на величину шага);

Loop

End Sub.

В результате запуска данного макроса в «Эксель» получаем два столбца, в первом из которых записаны значения для x, а во втором — для y.

Затем по ним строится график способом, стандартным для «Эксель».

как сделать скрипт в excel

Пример 3

Для реализации циклов в VBA Excel 2010, как и в других версиях, наряду с уже приведенной конструкцией Do While используется For.

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

Сначала нужно создать макрос, как описано выше. Далее записываем сам код. Считаем, что нас интересуют значения для 10 ячеек. Код выглядит следующим образом.

For i = 1 to 10 Next

Команда переводится на «человеческий» язык, как «Повторять от 1 до 10 с шагом один».

Если ставится задача получить столбец с квадратами, например, всех нечетных чисел из диапазона от 1 до 11, то пишем:

For i = 1 to 10 step 1 Next.

Здесь step — шаг. В данном случае он равен двум. По умолчанию отсутствие этого слова в цикле означает, что шаг единичный.

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

В целом код будет выглядеть, как:

Sub program()

For i = 1 To 10 Step 1 (можно записать просто For i = 1 To 10)

Cells(i, 1).Value = i ^ 2 (т.е. в ячейку (i,1) записывается значение квадрата i)

Next (в некотором смысле играет роль счетчика и означает еще один запуск цикла)

End Sub.

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

как сделать скрипт в excel

Пример 4

В повседневной жизни сплошь и рядом возникает необходимость принять то или иное решение в зависимости от какого-то условия. Не обойтись без них и в VBA Excel. Примеры программ, где дальнейший ход выполнения алгоритма выбирается, а не предопределен изначально, чаще всего используют конструкцию If …Then (для сложных случаев) If …Then …END If.

Рассмотрим конкретный случай. Предположим, необходимо создать макрос для «Эксель», чтобы в ячейку с координатами (1,1) было записано:

1, если аргумент положительный;

0, если аргумент нулевой;

-1, если аргумент отрицательный.

Создание такого макроса для «Эксель» начинается стандартным способом, через использование «горячих» клавиш Alt и F11. Далее записывается следующий код:

Sub program()

x= Cells(1, 1).Value (эта команда присваивает x значение содержимого ячейки с координатами (1, 1))

If x>0 Then Cells(1, 1).Value = 1

If x=0 Then Cells(1, 1).Value = 0

If x

09 Мар 3 способа написать и оформить скрипт продаж

Давайте разберемся, как обычно создаются скрипты продаж?

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

Первый способ. Скрипт «от руки».

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

Это может выглядеть так:

как сделать скрипт в excel

Никаких затрат с Вашей стороны.

Но и эффективность таких скриптов оставляет желать лучшего:

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

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

К сожалению, такой способ часто используется во многих компаниях малого и среднего бизнеса. Обычно это бывает, когда система телефонных продаж не настроена и менеджеры делают звонки как умеют и используют те инструменты, которые знают :-).

Второй способ. Скрипт продаж в офисных программах (Excel, Word и тд)

Более продвинутый и системный подход к внедрению скриптов продаж — это составление и использование скриптов в офисных программах, таких как Excel или Word (или аналогичных).

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

как сделать скрипт в excel

В этом случае менеджеру будет удобно им пользоваться: услышал возражение — нажал на ссылку в скрипте — на экране появился ответ на это возражение.

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

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

Минусы — нет интеграции с CRM системами и телефонией.

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

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

Вы заходите на сайт сервиса — регистрируетесь — начинаете рисовать свой скрипт продаж.

Это может выглядеть вот так:

как сделать скрипт в excel

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

При использовании скрипта экран выглядит гораздо проще: есть фраза менеджера, есть варианты ответов клиентов. Менеджер слушает и нажимает на нужную кнопку.

как сделать скрипт в excel

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

Преимуществами таких сервисов, на мой взгляд, являются

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

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

В следующих статьях поподробнее расскажу о конструкторах скриптов продаж.

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

С уважением, Олег (дружить в ВК, инстаграм) 

Полезные ссылки: 

  • 5 способов больше продавать по телефону — полезная статья с конкретными рекомендациями
  • Видеокурс «Конструктор скриптов телефонных продаж» — это целый комплект материалов, подготовленный с одной целью — чтобы Вы могли за несколько часов создать полноценный скрипт продаж с учетом особенностей Вашего бизнеса.
  • Видеокурс «Клоузер: всегда закрывай сделку» — система закрытия сделок и более 40 мощных техник помогут Вам закрывать больше сделок в любом бизнесе — от мелкой розницы до крупных корпоративных продаж.
  • Бесплатный курс «Быстрый старт в продажах» — даже если Вы новичок в продажах, курс поможет Вам привлечь новых клиентов уже в течение 1 недели, построить системную работу и повысить профессионализм в области продаж.
  • Бесплатный аудит Ваших продаж! Начните с аудита Ваших продаж! Это бесплатно и полезно. Я проверю более 50 точек роста Ваших продаж и вышлю Вам PDF отчет по результатам аудита в течение 5 дней.
  • Youtube канал «ПораРасти» – подписывайтесь сейчас, чтобы получать доступ к новым материалам первыми;
  • Группа в ВК «ПораРасти» – сообщество для тех, кто хочет продавать красиво и легко, развивать собственный бизнес, приносить людям реальную пользу, а не заниматься впариванием. Присоединяйтесь сейчас! Здесь много бесплатных материалов, PDF и т.д.

Время на прочтение
7 мин

Количество просмотров 312K

Приветствую всех.

В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.

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

Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.

Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.

Поэтому, увы, будем учить Visual Basic.

Чуть-чуть подготовки и постановка задачи

Итак, поехали. Открываем Excel.

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

Появилась вкладка.

Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):

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

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

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

Кодим

Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».

И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».

Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:

Sub FormatPrice()End Sub

Напишем Hello World:

Sub FormatPrice()
    MsgBox "Hello World!"
End Sub

И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.

Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.

Примеры синтаксиса

' Процедура. Ничего не возвращает
' Перегрузка в VBA отсутствует
Sub foo(a As String, b As String)
    ' Exit Sub ' Это значит "выйти из процедуры"
    MsgBox a + ";" + b
End Sub' Функция. Вовращает Integer
Function LengthSqr(x As Integer, y As IntegerAs Integer
    ' Exit Function
    LengthSqr = x * x + y * y
End FunctionSub FormatPrice()
    Dim s1 As String, s2 As String
    s1 = "str1"
    s2 = "str2"
    If s1 <> s2 Then
        foo "123""456" ' Скобки при вызове процедур запрещены
    End IfDim res As sTRING ' Регистр в VB не важен. Впрочем, редактор Вас поправит
    Dim i As Integer
    ' Цикл всегда состоит из нескольких строк
    For i = 1 To 10
        res = res + CStr(i) ' Конвертация чего угодно в String
        If i = 5 Then Exit For
    Next iDim x As Double
    x = Val("1.234"' Парсинг чисел
    x = x + 10
    MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
    x = 5 / 0
    MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
    x = 5 / 0
    MsgBox "OK!"
    GoTo ne

Err:
    MsgBox 

"Err!"

ne:

On Error GoTo 0 ' Отключаем обработку ошибок

    ' Циклы бывает, какие захотите
    Do While True
        Exit DoLoop 'While True
    Do 'Until False
        Exit Do
    Loop Until False
    ' А вот при вызове функций, от которых хотим получить значение, скобки нужны.
    ' Val также умеет возвращать Integer
    Select Case LengthSqr(Len("abc"), Val("4"))
    Case 24
        MsgBox "0"
    Case 25
        MsgBox "1"
    Case 26
        MsgBox "2"
    End Select' Двухмерный массив.
    ' Можно также менять размеры командой ReDim (Preserve) - см. google
    Dim arr(1 to 10, 5 to 6) As Integer
    arr(1, 6) = 8Dim coll As New Collection
    Dim coll2 As Collection
    coll.Add "item""key"
    Set coll2 = coll ' Все присваивания объектов должны производится командой Set
    MsgBox coll2("key")
    Set coll2 = New Collection
    MsgBox coll2.Count
End Sub

Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.

Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.

Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.

Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.

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

Кодим много и под Excel

В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.

Sub FormatPrice()
    Sheets("result").Cells.Clear
    Sheets("data").Activate
End Sub

Работа с диапазонами ячеек

Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.

Примеры работы с Range

Sheets("result").Activate
Dim r As Range
Set r = Range("A1")
r.Value = "123"
Set r = Range("A3,A5")
r.Font.Color = vbRed
r.Value = "456"
Set r = Range("A6:A7")
r.Value = "=A1+A3"

Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

  1. Считали группы из очередной строки.
  2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
    1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
  3. После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.

Для упрощения работы рекомендую определить следующие функции-сокращения:

Function GetCol(Col As IntegerAs String
    GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As IntegerAs Range
    Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As IntegerAs Range
    Set GetCell = Range(GetCol(Col) + CStr(Row))
End Function

Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».

Глобальные переменные

Option Explicit ' про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3

FormatPrice

Sub FormatPrice()
    Dim I As Integer ' строка в data
    CurRow = 1
    Dim Groups(1 To GroupsCount) As String
    Dim PrGroups(1 To GroupsCount) As String

    Sheets(

"data").Activate
    I = 2
    Do While True
        If GetCell(0, I).Value = "" Then Exit Do
        ' ...
        I = I + 1
    Loop
End Sub

Теперь надо заполнить массив Groups:

На месте многоточия

Dim I2 As Integer
For I2 = 1 To GroupsCount
    Groups(I2) = GetCell(I2, I)
Next I2
' ...
For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
    PrGroups(I2) = Groups(I2)
Next I2
I =  I + 1

И создать заголовки:

На месте многоточия в предыдущем куске

For I2 = 1 To GroupsCount
    If Groups(I2) <> PrGroups(I2) Then
        Dim I3 As Integer
        For I3 = I2 To GroupsCount
            AddHeader I3, Groups(I3)
        Next I3
        Exit For
    End If
Next I2

Не забудем про процедуру AddHeader:

Перед FormatPrice

Sub AddHeader(Ty As Integer, Name As String)
    GetCellS("result", 1, CurRow).Value = Name
    CurRow = CurRow + 1
End Sub

Теперь надо перенести всякую информацию в result

For I2 = 0 To DataCount - 1
    GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
Next I2

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

После цикла в конце FormatPrice

Sheets("Result").Activate
Columns.AutoFit

Всё. Можно любоваться первой версией.

Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:

Sub AddHeader(Ty As Integer, Name As String)
    Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
    ' Чтобы не заводить переменную и не писать каждый раз длинный вызов
    ' можно воспользоваться блоком With
    With GetCellS("result", 0, CurRow)
        .Value = Name
        .Font.Italic = True
        .Font.Name = "Cambria"
        Select Case Ty
        Case 1 ' Тип
            .Font.Bold = True
            .Font.Size = 16
        Case 2 ' Производитель
            .Font.Size = 12
        End Select
        .HorizontalAlignment = xlCenter
    End With
    CurRow = CurRow + 1
End Sub

Уже лучше:

Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:

Поэтому чуть-чуть меняем код с добавлением стиля границ:

Sub AddHeader(Ty As Integer, Name As String)
    With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
        .Merge
        .Value = Name
        .Font.Italic = True
        .Font.Name = "Cambria"
        .HorizontalAlignment = xlCenterSelect Case Ty
        Case 1 ' Тип
            .Font.Bold = True
            .Font.Size = 16
            .Borders(xlTop).Weight = xlThick
        Case 2 ' Производитель
            .Font.Size = 12
            .Borders(xlTop).Weight = xlMedium
        End Select
        .Borders(xlBottom).Weight = xlMedium ' По убыванию: xlThick, xlMedium, xlThin, xlHairline
    End With
    CurRow = CurRow + 1
End Sub

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

В начале FormatPrice

Dim I As Integer ' строка в  data
CurRow = 0 ' чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String

В цикле расстановки заголовков

If Groups(I2) <> PrGroups(I2) Then
    CurRow = CurRow + 1
    Dim I3 As Integer

В точности то, что и хотели.

Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.

Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.

Спасибо за внимание.

Буду рад конструктивной критике в комментариях.

UPD: Перезалил пример на Dropbox и min.us.

UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.

#Руководства

  • 23 май 2022

  • 0

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

Иллюстрация: Meery Mary для Skillbox Media

Ксеня Шестак

Рассказывает просто о сложных вещах из мира бизнеса и управления. До редактуры — пять лет в банке и три — в оценке имущества. Разбирается в Excel, финансах и корпоративной жизни.

Макрос (или макрокоманда) в Excel — алгоритм действий в программе, который объединён в одну команду. С помощью макроса можно выполнить несколько шагов в Excel, нажав на одну кнопку в меню или на сочетание клавиш.

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

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

В статье разберёмся:

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

Общий принцип работы макросов такой:

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

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

  • Автоматизировать повторяющиеся процедуры.

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

  • Объединять работу нескольких программ Microsoft Office.

    Например, с помощью одного макроса можно создать таблицу в Excel, вставить и сохранить её в документе Word и затем отправить в письме по Outlook.

  • Искать ячейки с данными и переносить их в другие файлы.

    Этот макрос пригодится, когда нужно найти информацию в нескольких объёмных документах. Макрос самостоятельно отыщет её и принесёт в заданный файл за несколько секунд.

  • Форматировать таблицы и заполнять их текстом.

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

  • Создавать шаблоны для ввода данных.

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

  • Создавать новые функции Excel.

    Если пользователю понадобятся дополнительные функции, которых ещё нет в Excel, он сможет записать их самостоятельно. Все базовые функции Excel — это тоже макросы.

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

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

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

  • Написать макрос вручную.

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

  • Записать макрос с помощью кнопки меню Excel.

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

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

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

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

Пользоваться таким отчётом неудобно — нужно сделать его наглядным. Запишем макрос при форматировании таблицы с продажами за январь и затем применим его к двум другим таблицам.


Готовимся к записи макроса

Кнопки для работы с макросами в Excel находятся во вкладке «Разработчик». Эта вкладка по умолчанию скрыта, поэтому для начала разблокируем её.

В операционной системе Windows это делается так: переходим во вкладку «Файл» и выбираем пункты «Параметры» → «Настройка ленты». В открывшемся окне в разделе «Основные вкладки» находим пункт «Разработчик», отмечаем его галочкой и нажимаем кнопку «ОК» → в основном меню Excel появляется новая вкладка «Разработчик».

В операционной системе macOS это нужно делать по-другому. В самом верхнем меню нажимаем на вкладку «Excel» и выбираем пункт «Параметры…».

Нажимаем сюда, чтобы вызвать панель с дополнительными параметрами Excel в macOS
Скриншот: Skillbox Media

В появившемся окне нажимаем кнопку «Лента и панель».

Выбираем параметр «Лента и панель»
Скриншот: Skillbox Media

Затем в правой панели «Настроить ленту» ищем пункт «Разработчик» и отмечаем его галочкой. Нажимаем «Сохранить».

Отмечаем пункт «Разработчик» и сохраняем изменения
Скриншот: Skillbox Media

Готово — вкладка «Разработчик» появилась на основной панели Excel.

Теперь можно работать с макросами
Скриншот: Skillbox Media

Чтобы Excel смог сохранить и в дальнейшем использовать макрос, нужно пересохранить документ в формате, который поддерживает макросы. Это делается через команду «Сохранить как» на главной панели. В появившемся меню нужно выбрать формат «Книга Excel с поддержкой макросов».

Перед записью макросов нужно сохранить документ в формате с их поддержкой
Скриншот: Skillbox Media

Перед началом записи макроса важно знать об особенностях его работы:

  • Макрос записывает все действия пользователя.

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

  • Работу макроса нельзя отменить.

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

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

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

Для начала записи макроса перейдём на вкладку «Разработчик» и нажмём кнопку «Записать макрос».

Нажимаем сюда, чтобы начать запись макроса
Скриншот: Skillbox Media

Появляется окно для заполнения параметров макроса. Нужно заполнить поля: «Имя макроса», «Сохранить в», «Сочетание клавиш», «Описание».

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

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

Первым символом в названии обязательно должна быть буква. Другие символы могут быть буквами или цифрами. Важно не использовать пробелы в названии — их можно заменить символом подчёркивания.

«Сохранить в» — здесь нужно выбрать книгу, в которую макрос сохранится после записи.

Если выбрать параметр «Эта книга», макрос будет доступен при работе только в этом файле Excel. Чтобы макрос был доступен всегда, нужно выбрать параметр «Личная книга макросов» — Excel создаст личную книгу макросов и сохранит новый макрос в неё.

«Сочетание клавиш» — здесь к уже выбранным двум клавишам (Ctrl + Shift в системе Windows и Option + Cmd в системе macOS) нужно добавить третью клавишу. Это должна быть строчная или прописная буква, которую ещё не используют в других быстрых командах компьютера или программы Excel.

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

«Описание» — необязательное поле, но лучше его заполнять. Например, можно ввести туда последовательность действий, которые планируется записать в этом макросе. Так не придётся вспоминать, какие именно команды выполнит этот макрос, если нужно будет запустить его позже. Плюс будет проще ориентироваться среди других макросов.

В нашем случае с форматированием таблицы заполним поля записи макроса следующим образом и нажмём «ОК».

Заполняем поля и жмём «ОК», чтобы начать запись
Скриншот: Skillbox Media

После этого начнётся запись макроса — в нижнем левом углу окна Excel появится значок записи.

Началась запись макроса — теперь в него попадут все клики мышки и нажатия клавиш
Скриншот: Skillbox Media

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

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

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

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

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

После всех манипуляций с оформлением таблица примет такой вид:

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

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

  • Нажать на кнопку записи в нижнем левом углу.
  • Перейти во вкладку «Разработчик» и нажать кнопку «Остановить запись».

Нажимаем сюда, чтобы остановить запись макроса
Скриншот: Skillbox Media

Готово — мы создали макрос для форматирования таблиц в границах столбцов A–G. Теперь его можно применить к другим таблицам.


Запускаем макрос

Перейдём в лист со второй таблицей «Февраль_2022». В первоначальном виде она такая же нечитаемая, как и первая таблица до форматирования.

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

Отформатируем её с помощью записанного макроса. Запустить макрос можно двумя способами:

  • Нажать комбинацию клавиш, которую выбрали при заполнении параметров макроса — в нашем случае Option + Cmd + Ф.
  • Перейти во вкладку «Разработчик» и нажать кнопку «Макросы».

Нажимаем сюда, чтобы вызвать панель для выбора макроса
Скриншот: Skillbox Media

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

Нажимаем сюда, чтобы запустить макрос для форматирования таблицы
Скриншот: Skillbox Media

Готово — вторая таблица с помощью макроса форматируется так же, как и первая.

За пару секунд с помощью макроса исходная таблица принимает такой вид
Скриншот: Skillbox Media

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

Научитесь: Excel + Google Таблицы с нуля до PRO
Узнать больше

Microsoft Excel enables users to automate features and commands using macros and Visual Basic for Applications (VBA) scripting. VBA is the programming language Excel uses to create macros. It will also execute automated commands based on specific conditions.

Macros are a series of pre-recorded commands. They run automatically when a specific command is given. If you have tasks in Microsoft Excel that you repeatedly do, such as accounting, project management, or payroll, automating these processes can save a lot of time.

Under the Developer tab on the Ribbon in Excel, users can record mouse clicks and keystrokes (macros).  However, some functions require more in-depth scripting than macros can provide. This is where VBA scripting becomes a huge benefit. It allows users to create more complex scripts.

In this article, we will explain the following:

  • Enabling Scripts & Macros
  • How to Create a Macro in Excel
  • Specific Example of a Macro
  • Learn More About VBA
  • Create a Button to Get Started with VBA
  • Add Code to Give the Button Functionality
  • Did it Work?

Enabling Scripts & Macros

Before you can create macros or VBA scripts in Excel, you must enable the Developer tab on the Ribbon menu. The Developer tab is not enabled by default. To enable it:

  • Open an Excel worksheet.
  • Click on File > Options > Customize Ribbon.
  • Put a tick in the box next to Developer.
  • Click on the Developer tab from the Ribbon menu.
  • Next, click on Macro Security and tick the box next to Enable all macros (not recommended; potentially dangerous code can run). 
  • Then click OK.

The reason macros are not turned on by default and come with a warning is that they are computer code that could contain malware.

Make sure the document is from a trusted source if you are working on a shared project in Excel and other Microsoft programs.

When you are done using your scripts and macros, disable all macros to prevent potentially malicious code from infecting other documents.

All the actions you take in Excel while recording a macro are added to it. 

  • From the Developer tab, click on Record Macro.
  • Enter a Macro name, a Shortcut key, and a Description. Macro names must begin with a letter and can’t have any spaces. The shortcut key must be a letter.

Decide where you want to store the macro from the following options:

  • Personal Macro Workbook: This will create a hidden Excel document with stored macros to be used with any Excel documents.
  • New Workbook: Will create a new Excel document to store the created macros.
  • This Workbook: This will only be applied to the document you are currently editing.

When done, click OK

  • Run through the actions you want to automate. When you are finished, click Stop Recording
  • When you want to access your macro, use the keyboard shortcut you gave it.

Specific Example Of a Macro

Let’s start with a simple spreadsheet for customers and how much they owe. We will begin by creating a macro to format the worksheet.

Let’s assume that you decide that all spreadsheets should use a different format such as putting first and last name in separate columns. 

You can manually change this. Or you can create a program using a macro to automatically format it correctly for you.

Record The Macro

  • Click on Record Macro. Let’s call it Format_Customer_Data and click OK
  • To get the formatting we want, we will change the first column name to First Name
  • Then insert a column next to A and call it Last Name
  • Highlight all the names in the first column (which still include first and last name), and click on Data from the ribbon navigation.
  • Click on Text to Columns.
  • Tick Delimited > Next > Separate by Space > Next > Finish. See screenshot below and how the first and last names were separated by the process above.
  • To format the Balance Due field, highlight the amounts. Click on Home > Conditional Formatting > Highlight Cell Rules > Greater Than > 0.

This will highlight the cells that have a balance due. We added a few customers with no balance due to further illustrate the formatting.  

  • Go back to Developer and click Stop Recording.

Apply The Macro

Let’s start with the original spreadsheet before we recorded the macro to format it correctly. Click on Macros, select and Run the macro you just created.

When you run a macro, all the formatting is done for you. This macro we just created is stored in the Visual Basic Editor.

Users can run macros in several different ways. Read Run a macro to learn more.  

Learn More About VBA

To learn about VBA, click on Macro from the Developer tab. Find one you have created and click Edit.

The code you see in the box above is what was created when you recorded your macro. 

It is also what you will run when you want to format other customer payment spreadsheets in the same way.

Create a Button To Get Started With VBA

Using the same spreadsheet above with customers and how much they owe, let’s create a currency converter.

  • To insert a button element, navigate to the Developer tab. 
  • Select ActiveX Command Button from the dropdown next to Insert in the Controls section.
  • Drag the button anywhere on the spreadsheet so you can easily access it and change it later if you want.
  • To attach the code, right-click on the button and select Properties. We will keep the Name as CommandButton and the Caption to Convert (this is the button text).

Add Code To Give The Button Functionality

VBA coding doesn’t take place in the Excel interface. It is done in a separate environment.  

  • Go to the Developer tab and make sure Design Mode is active.
  • To access the code of the button we just created, right-click on it and select View Code.
  • Looking at the code in the screenshot below, notice the beginning (Private Sub) and end (End Sub) of the code is already there.
  • The code below will drive the currency conversion procedure.

ActiveCell.Value = (ActiveCell * 1.28)

Our purpose in this section is to convert the currency in our spreadsheet. The script above reflects the exchange rate from GBP to USD. The new value of a cell will be what is currently there multiplied by 1.28.

The screenshot below shows you how the code looks in the VBA window after you insert it .

  • Go to File in the top navigation and click on Close and Return to Microsoft Excel to return to the main Excel interface.

Did It Work?

Before you can test your code, you must first disable Design Mode (click on it) to avoid further modifications and give the button functionality.

  • Type any number into your spreadsheet and then click the Convert button. If the value of your number increases by approximately one-quarter, it worked.

For this example, I put the number 4 into a cell. After clicking Convert, the number changed to 5.12. Since 4 times 1.28 is 5.12, the code was carried out correctly.

Now that you understand how to create a macro or script in Excel, you can use them to automate a multitude of actions in Excel.

Макрос, или макрокоманда — это небольшая программа, которая выполняет заданный набор действий в офисном документе. Чаще всего макросами пользуются в Microsoft Office Excel для работы с таблицами. Создать и запустить их можно внутри Excel.

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

Кто пользуется макросами в работе

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

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

Для чего нужны макросы

Макросы помогают:

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

Как это работает

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

Сохранить макрос можно локально — для конкретного документа, или глобально — для всех документов.

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

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

VBA: язык для макросов

«Изнутри» макрос — код на языке программирования VBA, который принадлежит Microsoft. Аббревиатура расшифровывается как Visual Basic Application. Язык основан на Visual Basic, но адаптирован для использования внутри офисного пакета. Код описывает команды, которые нужно выполнить.

Окно VBA в Excel

VBA встроен в Excel и другие программы Microsoft Office. Это значит, что они распознают язык и могут выполнять написанные на нем команды, если те поступят в программу. Писать на нем можно изнутри офисного пакета в окне Visual Basic — оно открывается через меню.

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

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

Для обоих способов нужно открыть панель макросов. Это можно сделать через меню: вкладка «Разработчик», кнопка «Макросы». Если у вас в интерфейсе нет вкладки разработчика, кнопку можно найти в разделе «Вид» справа. А можно настроить окно так, чтобы вкладка появилась:

  1. перейти по пути «Файл — Параметры» или кликнуть правой кнопкой по меню;
  2. выбрать «Параметры Excel» и «Настроить ленту»;
  3. в списке «Основные вкладки» поставить галочку напротив пункта «Разработчик».

Теперь подробнее поговорим об обоих способах создания макроса.

Написать код вручную. Для этого понадобится открыть окно набора кода. Можно сделать это из вкладки «Разработчик»: там есть кнопка, которая называется Visual Basic. Если вы нажмете на нее, откроется окно. Оно будет пустым: редактор для написания кода надо открыть самостоятельно с помощью меню слева. Там есть кнопка View Code.

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

Второй способ открыть интерфейс для написания кода — нажать на кнопку «Макросы», ввести название нового макроса в верхней строке и нажать «Создать». В этом случае окно VBA откроется уже с пустой «заготовкой» под макрос и открытым редактором, где прописаны начало и конец команды. Останется только написать код в этом редакторе и сохранить.

Мы не будем углубляться в синтаксис и правила написания кода на Visual Basic: если человек только начинает работать с макросами, поначалу он редко пользуется этой возможностью. Хотя в будущем она может серьезно ему помочь.

Записать действия с таблицей. Второй вариант, более простой и не требующий уметь программировать, — воспользоваться макрорекордером. Так называется встроенный инструмент Excel, который «записывает» действия пользователя и потом на их основе автоматически генерирует код. Это похоже на запись видео или звука, только «пишутся» не кадры, а действия.

Кнопка записи макроса

Выглядит это так: человек нажимает во вкладке «Разработчик» на кнопку «Записать макрос», вводит для него название, а потом выполняет действия с таблицей. Макрорекордер записывает эти действия и переводит их в код на Visual Basic, который сохраняется в виде макроса. Потом пользователь нажимает кнопку «Остановить запись», и рекордер прекращает записывать. Макрос готов, и им можно пользоваться

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

Ограничения в использовании макрорекордера

Запись макроса – мощный, но не всемогущий инструмент. У нее есть ряд ограничений. С ее помощью нельзя:

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

Но все перечисленное можно сделать вручную с помощью VBA. Более того: код пишется на Visual Basic, и «понимать» его может не только Excel — практически все программы офисного пакета. Поэтому макрос, написанный самостоятельно, может взаимодействовать поочередно с несколькими программами, например загружать в Excel данные из Access. Возможность работы «за пределами» Excel специфична для кода, написанного вручную.

Окно выбора объектов

Что лучше: писать код или записывать действия

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

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

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

Расширение файлов с макросами

Обычный файл Excel не может сохранить внутри себя макрос. Чтобы тот остался в документе и его можно было пересылать вместе с таблицей, понадобится сохранить файл с расширением .xslm — он поддерживает макросы. Файлы с расширением .xlsx их не поддерживают.

Формат сохранения файлов с макросами

Абсолютные и относительные значения

Как и при написании функций в Excel, в макросах можно задавать абсолютные и относительные значения ячеек. По умолчанию макрос работает с абсолютными значениями — то есть, если вы кликнете в макрорекордере на ячейку B5, он при выполнении всегда будет выбирать B5. Чтобы макрос пользовался относительными значениями, то есть мог работать с разными ячейками, понадобится включить режим «Относительные ссылки». Кнопка для его включения находится прямо под кнопкой записи макроса.

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

Создание макроса через запись: пошаговая инструкция

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

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

После этого нужно будет нажать на кнопку «Запись макроса».

Параметры макроса. Откроется окно, в котором надо будет придумать уникальное имя для макрокоманды, а по желанию — комбинацию клавиш, которая будет запускать макрос. Там же надо будет:

  • выбрать, где сохранится макрос — внутри открытого документа, внутри новой таблицы или в «личной книге», то есть глобально для всего Excel;
  • придумать короткое описание, которое объясняет, что делает команда.

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

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

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

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

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

Особенности выполнения действий. Помните, что рекордер записывает все выделения, клики или переходы по ячейкам, поэтому старайтесь не совершать лишних действий. Если вы сделали что-то лишнее, отменить это можно, только если отредактировать код в редакторе Visual Basic — или записать макрос с самого начала.

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

Остановка записи. Когда вы сделаете все необходимое, запись можно останавливать. Для этого нажмите кнопку «Остановить запись» в том же меню «Разработчик». Макрос запишется и сохранится. С этого момента он будет доступен для выполнения:

  • если вы создали его для конкретной книги — из этой книги;
  • если вы сохранили его в личную книгу — из любого документа Excel.

Как пользоваться созданным макросом

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

Окно запуска макросов

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

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

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

Понравилась статья? Поделить с друзьями:
  • Science word part dictionary
  • Script excel with python
  • Science word of the week
  • Science word of the day
  • Screws of the word