Макросы в excel vba тело

Введение

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

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

В принципе, существует великое множество языков программирования (Pascal, Fortran, C++, C#, Java, ASP, PHP…), но для всех программ пакета Microsoft Office стандартом является именно встроенный язык VBA. Команды этого языка понимает любое офисное приложение, будь то Excel, Word, Outlook или Access.

Способ 1. Создание макросов в редакторе Visual Basic

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

  • В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис — Макрос — Редактор Visual Basic (Toos — Macro — Visual Basic Editor).
  • В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer). Выбираем Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer). Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic (Visual Basic Editor)



    macro1.png:

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

macro2.png

Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:

  • Обычные модули — используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert — Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:

    macro3.png

  • Модуль Эта книга — также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):

    macro4.png

  • Модуль листа — доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа — команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)

    macro5.png

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

macro6.png

Давайте разберем приведенный выше в качестве примера макрос Zamena:

  • Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
  • Любой макрос должен заканчиваться оператором End Sub.
  • Все, что находится между Sub и End Sub — тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).

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

Способ 2. Запись макросов макрорекордером

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

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу — запись останавливается.
  • Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
  • Если во время записи макроса макрорекордером вы ошиблись — ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) — во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.

Чтобы включить запись необходимо:

  • в Excel 2003 и старше — выбрать в меню Сервис — Макрос — Начать запись (Tools — Macro — Record New Macro)
  • в Excel 2007 и новее — нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)

Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:

macro7.png

  • Имя макроса — подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
  • Сочетание клавиш — будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис — Макрос — Макросы — Выполнить (Tools — Macro — Macros — Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
  • Сохранить в… — здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
    • Эта книга — макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
    • Новая книга — макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
    • Личная книга макросов — это специальная книга Excel  с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.

После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording).

Запуск и редактирование макросов

Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или — в старых версиях Excel — через меню Сервис — Макрос — Макросы (Tools — Macro — Macros):

macro8.png

  • Любой выделенный в списке макрос можно запустить кнопкой Выполнить (Run).
  • Кнопка Параметры (Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
  • Кнопка Изменить (Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

Создание кнопки для запуска макросов

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

Кнопка на панели инструментов в Excel 2003 и старше

Откройте меню Сервис — Настройка (Tools — Customize) и перейдите на вкладку Команды (Commands). В категории Макросы легко найти веселый желтый «колобок» — Настраиваемую кнопку (Custom button):

macro9.gif

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

macro10.gif

Кнопка на панели быстрого доступа в Excel 2007 и новее

Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar):

macro11.png

Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:

macro12.png

Кнопка на листе

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

  • В Excel 2003 и старше — откройте панель инструментов Формы через меню Вид — Панели инструментов — Формы (View — Toolbars — Forms)
  • В Excel 2007 и новее — откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer) 

Выберите объект Кнопка (Button):

macro13.png

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

Создание пользовательских функций на VBA

Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция — только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).

Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert — Module и введем туда текст нашей функции:

macro14.png

Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка — Функция) в категории Определенные пользователем (User Defined):

macro15.png

После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:

macro16.png

Рассмотрим структуру макроса и его составные части. Результатом записи макроса является так называемая подпрограмма (subprogram). Если вы рассмотрите несколько записанных макросов, то увидите, что все они имеют общую структуру. Каждый макрос VBA начинается со слова Sub (сокращение слова subprogram – подпрограмма), следом за которым идет имя макроса. Строку с ключевым словом Sub и именем макроса называют строкой объявления макроса. Имя макроса должно начинаться сбуквы, но может содержать и числа. Имя макроса не может включать в себя пробелы или знаки препинания. В Excel максимальная длина имени макроса – 64 символа, а в Word она может составлять до 80 символов. За именем макроса всегда следуют пустые круглые скобки. Сразу за объявлением макроса следует тело макроса, которое может содержать, либо не содержать комментарии. Комментарий – это строка в макросе VBA, которая не содержит инструкций, это поясняющий текст. Строки комментариев начинаются с прямого апострофа (‘), который находится на той же клавише, где кавычки. Используются комментарии для того, чтобы код подпрограммы был более понятен при чтении.

Struktura_makrosov_VBA

Каждая строка в теле макроса состоит из одного или нескольких операторов VBA. Оператор VBA – это последовательность ключевых слов и других символов, которые совместно составляют одну полную инструкцию. На одной строке можно записать несколько инструкций, разделив их двоеточием, но, как правило, каждую инструкцию начинают с новой строки, это улучшает наглядность текста программ. За телом макроса следует строка, содержащая ключевые слова End Sub, что свидетельствует о том, что достигнут конец макроса. При выполнении инструкции End Sub никаких видимых действий не происходит, но при этом освобождается вся память, которая использовалась для выполнения подпрограммы. При просмотре макросов можно заметить, что различные части текста макроса отображаются различными цветами. Так, например, комментарии имеют зеленый цвет шрифта, а ключевые слова, имеющие строго определенный смысл отображаются синим цветом. Остальной текст макроса отображается черным цветом. При возникновении ошибок в программе, часть кода подкрашивается красным цветом. Для выделения различных секций макроса используются отступы в коде. Каждый уровень отступа помогает отделять одну часть макроса от другой. Отступы делать не обязательно, макросы будут выполняться независимо от них, размещение строк с отступом выполняется макрорекордером и хорошими программистами для более легкого чтения их программ. В коде макроса зачастую можно встретить сочетание пробела и символа подчеркивания (_) в конце строки. Эта комбинация называется символом продолжения строки и сообщает о том, что следующая строка макроса должна быть присоединена к текущей строке для образования единого оператора.

В чем отличие макроса от процедуры?

Многие пользователи используют термин «макрос» как для макросов, записанных рекордером, так и для макросов, написанных вручную. Существует термин, помогающий различать эти макросы. Термин «макрос», по большому счету, применим только к макросам, записанным при помощи макрорекордера и не имеющим переменных величин. Макросы, которые написаны, как говорится, с нуля, вручную, более точно называются подпроцедурами (subprocedures) или просто процедурами (procedures). В VBA предусмотрены процедуры типа Sub (подпрограмма) – универсальная процедура для выполнения каких-либо действий и процедуры типа Function (функция) – набор команд, возвращающий вызвавшей её программе какое-либо значение, которое там будет использовано.

Другие материалы по теме:

За каждой кнопкой панелей инструментовExcelзакреплена небольшая
программа – макрос. Макрос представляет
собой последовательность макрокоманд
и макрофункций.

Макросы Microsoft Office Excel— это простые,
легко адаптируемые и вместе с тем мощные
инструменты, позволяющие пользователю
экономить свое время и работать более
продуктивно [1].

Макросы Excel— это фрагменты кода,
которые хранятся в книге и позволяют
автоматизировать некоторые процедуры
систематизации данных.

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

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

В большинстве программ Microsoft Office, включая
Excel, в качестве языка программирования
макросов используется Visual Basic для
приложений (VBA).

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

При записи макроса все необходимые
действия записываются программой записи
макроса.

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

  1. нажать кнопку Microsoft Office, а затем щелкните
    Параметры Excel;

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

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

  1. на вкладке Разработчик в группе Код
    (см. рис. 4) нажать кнопку Безопасность
    макросов;

Рисунок
4 – Окно группы Код

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

Порядок записи макроса(применимо
кExcel2007):

  1. На вкладке Разработчик в группе Код
    нажать кнопку Запись макроса (см. рис.
    5).

Рисунок
5 – Окно запись макроса

  1. В поле Имя макроса ввести имя макроса.

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

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

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

  1. В списке Сохранить в выбрать книгу, в
    которой необходимо сохранить макрос.

Если нужно, чтобы данный макрос был
всегда доступен при работе в приложении
Excel, выберите вариант Личная книга
макросов. При выборе варианта Личная
книга макросов создается скрытая личная
книга макросов (Personal.xlsb) (если она еще
не существует), в которой сохраняется
данный макрос.

  1. Ввести описание макроса в поле Описание.

  2. Для начала записи макроса нажать кнопку
    ОК. На экран будет выведена панель
    инструментов Остановить запись. Панель
    содержит две кнопки: [Остановить запись]
    и [Относительная ссылка].

Если панель Остановить запись не
появилась, то ее можно отобразить
командой Вид►Панели инструментов►Остановить
запись.

  1. Выполнить щелчок на кнопке [Относительная
    ссылка]
    для того, чтобы макрос в дальнейшем
    выполнялся для любого выделенного
    блока ячеек, а не той ячейки, которая
    была активна при записи макроса.

  2. Выполнить действия, которые нужно
    записать.

  3. На вкладке Разработчик в группе Код
    нажать кнопку Остановить запись
    .

Можно также нажать кнопку Остановить
запись слева от строки состояния [1].

Существует несколько способов выполнения
макроса
(применимо кExcel2007):

  • Запуск макроса.

  • Запуск макроса нажатием клавиши CTRL в
    сочетании с клавишей быстрого вызова.

  • Запуск макроса нажатием кнопки на
    панели быстрого доступа.

  • Запуск макроса щелчком области
    графического объекта.

  • Автоматический запуск макроса во время
    открытия книги.

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

  1. Открыть книгу, содержащую нужный макрос.

  2. На вкладке Разработчик в группе Код
    нажать кнопку Макросы.

  3. В поле Имя макроса ввести имя макроса,
    который нужно выполнить.

  4. Выполнить одно из следующих действий:

  • для запуска макроса в книге Excel нажать
    кнопку Выполнить. Для запуска макроса
    можно также нажать клавиши CTRL+F8. Для
    прекращения выполнения макроса нажать
    клавишу ESC.

  • для запуска макроса из модуля Microsoft
    Visual Basic нажать кнопку Изменить, а затем
    в меню Run выберите команду Run Sub/UserForm или
    нажать клавишу F5 [1].

Запуск макроса нажатием клавиши CTRL в
сочетании с клавишей быстрого вызова:

  1. В поле Имя макроса выбрать макрос,
    которому нужно назначить сочетание
    клавиши CTRL с клавишей быстрого вызова.

  2. Нажать кнопку Параметры.

  3. В поле Сочетание клавиш ввести нужную
    прописную или строчную буквы.

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

  1. Ввести описание макроса в поле Описание.

  2. Нажать кнопку ОК, а затем — кнопку
    Отмена.

Запуск макроса нажатием кнопки на
панели быстрого доступа:

  1. Нажать кнопку Microsoft Office
    ,
    а затем щелкните Параметры Excel.

  2. В категории Настройка в списке Выбрать
    команды выбрать пункт Макрос.

  3. Выберать в списке созданный макрос и
    нажать кнопку Добавить.

  4. Чтобы изменить изображение на кнопке
    макроса, выбрать макрос в поле, в которое
    он был добавлен, и нажать кнопку Изменить.

  5. В поле Символ выберать нужное изображение
    для кнопки.

  6. Чтобы изменить имя макроса, которое
    отображается при наведении указателя
    мыши на кнопку, в поле Отображаемое имя
    ввести имя, которое требуется использовать.

  7. Нажать кнопку ОК, и кнопка макроса будет
    добавлена на панель быстрого доступа
    .

  8. На панели быстрого доступа нажать
    кнопку макроса.

Запуск макроса щелчком области
графического объекта:

  1. Выделить на листе графический объект
    (рисунок, клип, фигуру или рисунок
    SmartArt).

  2. Для создания активной области на
    существующем объекте нажать кнопку
    Фигуры в группе Иллюстрации на вкладке
    Вставка, выбрать одну из фигур и
    нарисовать ее на существующем объекте
    (см. рис. 6).

Рисунок
6 – Окно группы Иллюстрации

  1. Щелкнуть созданную активную область
    правой кнопкой мыши, а затем выбрать
    пункт Назначить макрос в контекстном
    меню.

  2. Выполнить одно из следующих действий:

  • Чтобы назначить графическому объекту
    существующий макрос, дважды щелкнуть
    нужный макрос или ввести его имя в поле
    Имя макроса.

  • Чтобы записать новый макрос для
    назначения выделенному графическому
    объекту, нажать кнопку Записать. После
    завершения записи макроса нажать кнопку
    Остановить запись
    на вкладке Разработчик в группе Код.

Можно также нажать кнопку Остановить
запись слева от строки состояния.

Для редактирования существующего
макроса щелкните его имя в поле Имя
макроса, а затем нажмите кнопку Изменить.

  1. Нажать кнопку ОК.

  2. На листе выбрать активную область.

  3. На вкладке Формат в группе Стили фигур
    выполнить следующие действия:

  • щелкнуть стрелку рядом с кнопкой Заливка
    фигуры и выбрать вариант Нет заливки;

  • щелкнуть стрелку возле кнопки Контур
    фигуры и выберать вариант Нет контура
    [1].

Автоматический запуск макроса во
время открытия книги:

Если макрос записан и сохранен с именем
«Auto_open», он будет запускаться при
каждом открытии книги, содержащей этот
макрос. Другим способом автоматического
запуска макроса при открытии книги
является написание процедуры на языке
VBA (Visual Basic для приложений) в событии Open
книги с помощью редактора Visual Basic. Событие
Open представляет собой встроенное событие
книги, запускающее код макроса при
каждом открытии книги.

Создание макроса «Авто_открыть»:

  1. Для сохранения макроса с конкретной
    книгой сначала нужно открыть эту книгу.

  2. На вкладке Разработчик в группе Код
    нажать кнопку Запись макроса.

  3. В поле Имя макроса ввести Авто_открыть.

  4. В списке Сохранить в выберать книгу, в
    которой нужно сохранить макрос.

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

  6. На вкладке Разработчик в группе Код
    нажать кнопку Остановить запись
    .

Чтобы предотвратить автоматическое
выполнение макроса «Auto_Open» при
запуске Microsoft Excel, во время запуска нужно
удерживать нажатой клавишу SHIFT.

Создание процедуры на языке VBA для
события Open книги:

  1. Сохранить и закрыть все открытые книги.

  2. Открыть или создать книгу, в которую
    нужно добавить макрос.

  3. На вкладке Разработчик в группе Код
    нажать кнопку Visual Basic.

  4. В окне обозревателя проектов щелкнуть
    правой кнопкой мыши объект ЭтаКнига,
    а затем в контекстном меню выбрать
    команду View Code (просмотр кода).

Если окно проекта не отображено, в меню
Вид щелкнуть пункт Окно проекта.

  1. В списке объектов, расположенном над
    окном кода, выбрать пункт Workbook.

  2. Будет автоматически создана пустая
    процедура для события Open, похожая на
    приведенную ниже:

Private Sub Workbook_Open()

End Sub

  1. Добавить в процедуру следующие строки
    текста программы:

Private Sub Workbook_Open()

MsgBox Date

Worksheets(«Sheet1»).Range(«A1»).Value
= Date

End Sub

  1. Переключиться на приложение Excel и
    сохранить данную книгу как книгу с
    поддержкой макросов (.XLSM).

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

  3. В окне сообщения нажать кнопку ОК.

Ячейка
A1 листа 1 также содержит дату, являющуюся
результатом запуска процедуры
«Workbook_Open».

Структура макроса.

Каждый макрос VBA начинается со слова
Sub
(сокращение слова subprogram –
подпрограмма), следом за которым идет
имя макроса. Строку с ключевым словом
Sub и именем макроса называют строкой
объявления макроса. Имя макроса должно
начинаться с буквы, но может содержать
и числа. Имя макроса не может включать
в себя пробелы или знаки препинания. В
Excel максимальная длина имени макроса –
64 символа, а в Word она может составлять
до 80 символов. За именем макроса всегда
следуют пустые круглые скобки. Сразу
за объявлением макроса следует тело
макроса, которое может содержать, либо
не содержать комментарии.Комментарий– это строка в макросе VBA, которая не
содержит инструкций, это поясняющий
текст. Строки комментариев начинаются
с прямого апострофа (‘). Используются
комментарии для того, чтобы код
подпрограммы был более понятен при
чтении.

Каждая строка в теле макроса состоит
из одного или нескольких операторов
VBA. Оператор VBA– это последовательность
ключевых слов и других символов, которые
совместно составляют одну полную
инструкцию [3]. На одной строке можно
записать несколько инструкций, разделив
их двоеточием, но, как правило, каждую
инструкцию начинают с новой строки, это
улучшает наглядность текста программ.
За телом макроса следует строка,
содержащая ключевыеслова End Sub, что
свидетельствует о том, что достигнут
конец макроса. При выполнении инструкции
End Sub никаких видимых действий не
происходит, но при этом освобождается
вся память, которая использовалась для
выполнения подпрограммы. При просмотре
макросов можно заметить, что различные
части текста макроса отображаются
различными цветами. Так, например,
комментарии имеют зеленый цвет шрифта,
а ключевые слова, имеющие строго
определенный смысл отображаются синим
цветом. Остальной текст макроса
отображается черным цветом. При
возникновении ошибок в программе, часть
кода подкрашивается красным цветом.
Для выделения различных секций макроса
используются отступы в коде. Каждый
уровень отступа помогает отделять одну
часть макроса от другой. Отступы делать
не обязательно, макросы будут выполняться
независимо от них, размещение строк с
отступом выполняется макрорекордером
и хорошими программистами для более
легкого чтения их программ. В коде
макроса зачастую можно встретить
сочетание пробела и символа подчеркивания
(_) в конце строки. Эта комбинация
называетсясимволом продолжения
строки
и сообщает о том, что следующая
строка макроса должна быть присоединена
к текущей строке для образования единого
оператора.

Личная книга макросов.

Описание:

хранение общих функций и
процедур для персонального использования

Требования:

нет

Достоинства:

возможность хранения
пользовательских функций для работы
с данными (UDF)

Недостатки:

сложности с
тиражированием

Для общих программ и макросов можно
использовать, так называемую, личную
книгу макросов – по умолчанию это файл
PERSONAL.XLS (в Excel 2007-2010 PERSONAL.XLSB). Файл с данным
именем создается при записи макроса
средствами Excel. Этот файл будет
автоматически загружаться каждый раз
при запуске Excel. Местонахождение данного
файла в каталоге Windows: ПОЛЬЗОВАТЕЛЬApplication
DataMicrosoftExcelXLSTART. На самом деле Excel будет
запускать автоматически все файлы из
данного каталога, независимо от имен
файлов.

Макросы, сохраненные в личной книге
макросов, называются глобальными.

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

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

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

​Назначить макрос​ на ячейку, может​ нужно назначить существующий​, так как они​ ввод текста или​ и не только…​

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

​ положение на листе.​ ввести большую букву​ Вас буде приведет​(Custom button)​Разработчик (Developer)​ в качестве примера​ любых нужных нам​ A активного рабочего​

​ Cells(i, 1).Value =​ значительно ускорить выполнение​ содержимого трёх ячеек​.​ появиться сообщение об​ макрос и выберите​ будут заменять собой​

​ чисел, выбор ячеек​ Они могут практически​ Для этого снова​ для комбинации, естественно​ пошаговый пример с​:​Затем необходимо настроить параметры​ макрос​ действий, которые нам​ листа ‘Имя листа​ iFib ‘Вычисляем следующее​ рутинных и однообразных​

​ (=C4+C5+C6).​В поле​ ошибке, указывающее на​ команду​

Абсолютная и относительная запись макроса

Вы уже знаете про абсолютные и относительные ссылки в Excel? Если вы используете абсолютную ссылку для записи макроса, код VBA всегда будет ссылаться на те же ячейки, которые вы использовали. Например, если вы выберете ячейку A2 и введете текст “Excel”, то каждый раз – независимо от того, где вы находитесь на листе и независимо от того, какая ячейка выбрана, ваш код будет вводить текст “Excel” в ячейку A2.

Если вы используете параметр относительной ссылки для записи макроса, VBA не будет привязываться к конкретному адресу ячейки. В этом случае программа будет “двигаться” относительно активной ячейки. Например, предположим, что вы уже выбрали ячейку A1, и вы начинаете запись макроса в режиме относительной ссылки. Теперь вы выбираете ячейку A2, вводите текст Excel и нажмите клавишу Enter. Теперь, если вы запустите этот макрос, он не вернется в ячейку A2, вместо этого он будет перемещаться относительно активной ячейки. Например, если выбрана ячейка B3, она переместится на B4, запишет текст “Excel” и затем перейдет к ячейке K5.

Теперь давайте запишем макрос в режиме относительных ссылок:

  1. Выберите ячейку A1.
  2. Перейдите на вкладку “Разработчик”.
  3. В группе “Код” нажмите кнопку “Относительные ссылки”. Он будет подсвечиваться, указывая, что он включен.
  4. Нажмите кнопку “Запись макроса”.
  5. В диалоговом окне “Запись макроса” введите имя для своего макроса. Например, имя “ОтносительныеСсылки”.
  6. В опции “Сохранить в” выберите “Эта книга”.
  7. Нажмите “ОК”.
  8. Выберите ячейку A2.
  9. Введите текст “Excel” (или другой как вам нравится).
  10. Нажмите клавишу Enter. Курсор переместиться в ячейку A3.
  11. Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.

Макрос в режиме относительных ссылок будет сохранен.

Теперь сделайте следующее.

  1. Выберите любую ячейку (кроме A1).
  2. Перейдите на вкладку “Разработчик”.
  3. В группе “Код” нажмите кнопку “Макросы”.
  4. В диалоговом окне “Макрос” кликните на сохраненный макрос “ОтносительныеСсылки”.
  5. Нажмите кнопку “Выполнить”.

Как вы заметите, макрос записал текст “Excel” не в ячейки A2. Это произошло, потому что вы записали макрос в режиме относительной ссылки. Таким образом, курсор перемещается относительно активной ячейки. Например, если вы сделаете это, когда выбрана ячейка B3, она войдет в текст Excel – ячейка B4 и в конечном итоге выберет ячейку B5.

Вот код, который записал макрорекодер:

 Sub ОтносительныеСсылки() ' ' ОтносительныеСсылки Макрос ' ' ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "Excel" ActiveCell.Offset(1, 0).Range("A1").Select End Sub 

Обратите внимание, что в коде нет ссылок на ячейки B3 или B4. Макрос использует Activecell для ссылки на текущую ячейку и смещение относительно этой ячейки.

Не обращайте внимание на часть кода Range(«A1»). Это один из тех случаев, когда макрорекодер добавляет ненужный код, который не имеет никакой цели и может быть удален. Без него код будет работать отлично.

Показывать сообщение

Просто вставьте команду MsgBox в свой макрос. Вот как в следующем примере:

MsgBox “текст сообщения”

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

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

Для начала запишем самый легкий макрос — зададим в ячейке А1 формат вида 12 345:

  • Открываем новую книгу, в ячейке А1 набираем шестизначное число 123456. Сейчас оно выдается без разделителей разрядов. Запишем макрос, который ставит эти разделители.
  • Заходим на панели инструментов в закладку Вид*, находим кнопку Макросы, жмем Запись макроса. В появившемся окне задаем имя макроса и книгу, в которой хотим этот макрос сохранить.

Важно

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

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

  • Выбираем Сохранить в… – Личная книга макросов и нажимаем Ок (рис. 1).

Рис. 1. Запись макроса в личную книгу макросов

  • Записываем в макрос действия, которые хотим выполнить: вызываем контекстное меню Формат ячеек (можно воспользоваться комбинацией клавиш Сtrl+1) и задаем нужный нам формат числа: на закладке Число идем в блок (все форматы) и выбираем там формат вида # ##0.

К сведению

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

  • На закладке Вид – Макросы выбираем пункт Остановить запись.

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

Мы рекомендуем

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

Проверяем, что макрос записан и работоспособен:

  • в ячейку А2 вбиваем любое шестизначное число;
  • запускаем макрос одним из двух способов: на закладке Вид – Макросы выбираем пункт Макросы или нажимаем комбинацию клавиш Alt+F8, находим в списке наш макрос и нажимаем кнопку Выполнить.

Рис. 2. Форматирование числа и остановка записи макроса

Итак, вы записали свой первый макрос! Примите поздравления. Теперь давайте познакомимся с личной книгой макросов и синтаксисом написания команд для макроса.

Цикл 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 не отображает личную книгу макросов. Чтобы убедиться, что она открыта, выбираем на вкладке Вид кнопку Отобразить — в появившемся окне должна быть книга под именем PERSONAL.

Мы убедились, что книга открыта, но отображать ее не будем, чтобы потом по ошибке не закрыть ее. По сути, в этой книге нас интересует так называемый Исходный текст — блок, в котором записываются макросы. Чтобы увидеть это окно, нажмите клавиши Alt+F11 или кликните правой кнопкой мыши на ярлыке любого листа Excel и выберите в контекстном меню Исходный текст. Откроется окно VBA-кодирования в Excel (рис. 3). Оно состоит из двух блоков:

1. В левой части экрана окно Project – VBAProject — это проводник, в котором отображаются все открытые в данный момент книги Excel (даже если вы их не видите, как, например, книгу Personal). Работа с этим блоком аналогична работе в обычном проводнике — двойной клик по наименованию книги раскрывает ее содержимое. Нас интересует блок Modules – Module1. Кликаем левой кнопкой мыши дважды по этому объекту.

2. В правой части экрана откроется блок записи и редактирования макросов. Здесь уже автоматически записался Макрос1. Рассмотрим на его примере основную канву макроса.

Рис. 3. Окно VBA-кодирования в Excel

Создаем макрос при помощи команды «Запись макроса»

  1. Для начала откройте вкладку View (Вид) на Ленте. В выпадающем списке Macros (Макросы) нажмите кнопку Record Macro (Запись макроса).Откроется диалоговое окно Record Macro (Запись Макроса).

  2. Задайте имя макросу (не допускаются пробелы и специальные символы), клавишу быстрого вызова, а также, где бы Вы хотели сохранить свой макрос. При желании, Вы можете добавить описание.
  3. С этого момента макрос записывает действия. Например, Вы можете ввести слово “Hello” в ячейку A1.
  4. Теперь снова нажмите иконку Macros (Макросы) и в раскрывшемся меню выберите Stop Recording (Остановить запись).

Доступ к записанному макросу можно получить с помощью команды View Macros (Макросы), которая находится на вкладке View (Вид) в выпадающем меню Macros (Макросы). Откроется диалоговое окно Macro (Макрос), в котором Вы сможете выбрать нужный. Дважды кликните по имени макроса, чтобы выполнить программу.

Кроме этого, Вы можете связать макрос с кнопкой. Для этого:

  1. На вкладке File (Файл) нажмите Options (Параметры) > Quick Access Toolbar (Панель быстрого доступа).
  2. В поле Choose commands from (Выбрать команды из) выберите All Commands (Все команды).
  3. Найдите команду Option Button (Кнопка), нам нужна та, что относится к разделу Form Control (Элементы управления формы). Выделите ее и нажмите Add (Добавить). Затем нажмите ОК, чтобы закрыть параметры Excel.
  4. Выберите команду, только что добавленную на Панель быстрого доступа, и начертите контур кнопки на рабочем листе Excel.
  5. Назначьте макрос объекту.

Примечание: Если у вас включена вкладка Developer (Разработчик), то получить доступ к элементам управления формы можно с нее. Для этого перейдите на вкладку Developer (Разработчик), нажмите на иконку Insert (Вставить) и из раскрывающегося меню выберите нужный элемент.

Не знаете, как отобразить вкладку Developer (Разработчик)? Excel 2007: жмем на кнопку Office > Excel Options (Параметры Excel) > Popular (Основные) и ставим галочку напротив опции Show Developer tab in the Ribbon (Показывать вкладку “Разработчик” на ленте). Excel 2010: жмем по вкладке File (Файл) > Options (Параметры) > Customize Ribbon (Настройка ленты) и в правом списке включаем вкладку Developer (Разработчик).

Отмена активной команды

Если кнопка в интерфейсе пользователя нажата, макрос, назначенный ей, все равно выполняется в текущем контексте программы. Это значит, что макрос будет пытаться ответить на текущий запрос. Если требуется убедиться, что ни одна команда не активна при выполнении макроса, поставьте перед макросом префикс последовательности команд^ C. Для отмены большинства команд достаточно ввести ^C один раз; для возврата к командной строке из команды простановки размеров необходимо ввести ^C^C^C^C^C. ^C^C обеспечивает отмену большинства последовательностей команд, поэтому рекомендуется широко использовать эту последовательность.

Запуск и редактирование макросов

Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или – в старых версиях Excel – через меню Сервис – Макрос – Макросы (Tools – Macro – Macros):

  • Любой выделенный в списке макрос можно запустить кнопкой Выполнить (Run).
  • Кнопка Параметры (Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
  • Кнопка Изменить (Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

Основные сведения о макросах

Макрос определяет действие, которое должно выполняться в том случае, если используется элемент интерфейса пользователя. Он может быть такой же простой, как команды (например, circle), и включать специальные символы (например, ^C^C).

Например, макрос ^C^C_.circle 1 строит окружность с радиусом, равным 1 единице. Компоненты, определяющие этот макрос, описаны в следующей таблице.

Компоненты макроса CIRCLE

Компонент

Тип компонента

Результат

^C^C

Последовательность специальных управляющих символов

Эта последовательность аналогична двойному нажатию клавиши ESC.

_

Специальный управляющий символ

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

.

Специальный управляющий символ

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

КРУГ

Имя команды

Запуск команды КРУГ.

Специальный символ

Оставляет столько же места, сколько при нажатии клавиши ПРОБЕЛ при использовании команды.

Специальный управляющий символ

Формирование паузы для ввода данных пользователем; в данном примере это пауза для центра окружности.

1

Входное значение

Ответ на запрос радиуса круга; в данном примере это значение 1.

Синтаксис макроса

Макросы — это команды, написанные на языке 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.

Создание макросов в редакторе Visual Basic

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

  • В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис – Макрос – Редактор Visual Basic (Toos – Macro – Visual Basic Editor).
  • В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer). Выбираем Файл – Параметры – Настройка ленты (File – Options – Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer). Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic (Visual Basic Editor)

    :

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

Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:

  • Обычные модули – используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert – Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
  • Модуль Эта книга – также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):
  • Модуль листа – доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа – команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)

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

Давайте разберем приведенный выше в качестве примера макрос Zamena:

  • Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
  • Любой макрос должен заканчиваться оператором End Sub.
  • Все, что находится между Sub и End Sub – тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).

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

Запись макросов макрорекордером

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

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу – запись останавливается.
  • Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
  • Если во время записи макроса макрорекордером вы ошиблись – ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) – во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.

Чтобы включить запись необходимо:

  • в Excel 2003 и старше – выбрать в меню Сервис – Макрос – Начать запись (Tools – Macro – Record New Macro)
  • в Excel 2007 и новее – нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)

Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:

  • Имя макроса – подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
  • Сочетание клавиш – будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис – Макрос – Макросы – Выполнить (Tools – Macro – Macros – Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
  • Сохранить в… – здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
    • Эта книга – макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
    • Новая книга – макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
    • Личная книга макросов – это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.

После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording).

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

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

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

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

Создание пользовательских функций на VBA

Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция – только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).

Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert – Module и введем туда текст нашей функции:

Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка – Функция) в категории Определенные пользователем (User Defined):

После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:

Конструкция IF

В Microsoft Excel Вы также можете использовать конструкцию IF. В этом коде мы будем раскрашивать ячейки в зависимости от их значения. Если значение в ячейке больше 20, то шрифт станет красным, иначе – синим.

Sub MacroName() Dim CellValue As Integer CellValue = ActiveCell.Value If CellValue > 20 Then With Selection.Font .Color = -16776961 End With Else With Selection.Font .ThemeColor = xlThemeColorLight2 .TintAndShade = 0 End With End If End Sub

Для проверки этого кода выберем ячейку со значением больше 20:

Когда Вы запустите макрос, цвет шрифта изменится на красный:

При выполнении второго условия шрифт станет синим:

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

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

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

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

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

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

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

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

Источники

  • https://micro-solution.ru/excel/vba/first-macros
  • https://exceltable.com/vba-macros/page-3
  • https://my-excel.ru/vba/komandy-makros-v-excel.html
  • https://blog.luz.vc/ru/%D0%BF%D1%80%D0%B5%D0%B2%D0%BE%D1%81%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%8C/10-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D1%85-%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D0%BE%D0%B2-%D0%B2-excel/
  • https://www.profiz.ru/se/4_2016/pichem_macrosy/
  • https://office-guru.ru/excel/rukovodstvo-i-primery-raboty-s-makrosami-v-excel-210.html
  • https://help.autodesk.com/cloudhelp/2017/RUS/AutoCAD-LT/files/GUID-D991386C-FBAA-4094-9FCB-AADD98ACD3EF.htm
  • https://www.planetaexcel.ru/techniques/3/59/

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

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

Для начала запишем самый легкий макрос — зададим в ячейке А1 формат вида 12 345:

  •  Открываем новую книгу, в ячейке А1 набираем шестизначное число 123456. Сейчас оно выдается без разделителей разрядов. Запишем макрос, который ставит эти разделители.
  •  Заходим на панели инструментов в закладку Вид*, находим кнопку Макросы, жмем Запись макроса. В появившемся окне задаем имя макроса и книгу, в которой хотим этот макрос сохранить.

Важно

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

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

  •  Выбираем Сохранить в… —  Личная книга макросов и нажимаем Ок (рис. 1).

Рис. 1. Запись макроса в личную книгу макросов

  •  Записываем в макрос действия, которые хотим выполнить: вызываем контекстное меню Формат ячеек (можно воспользоваться комбинацией клавиш Сtrl+1) и задаем нужный нам формат числа: на закладке Число идем в блок (все форматы) и выбираем там формат вида # ##0.

К сведению

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

  •  На закладке Вид — Макросы выбираем пункт Остановить запись.

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

Мы рекомендуем

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

Проверяем, что макрос записан и работоспособен:

  •  в ячейку А2 вбиваем любое шестизначное число;
  •  запускаем макрос одним из двух способов: на закладке Вид — Макросы выбираем пункт Макросы или нажимаем комбинацию клавиш Alt+F8, находим в списке наш макрос и нажимаем кнопку Выполнить.

Рис. 2. Форматирование числа и остановка записи макроса

Итак, вы записали свой первый макрос! Примите поздравления. Теперь давайте познакомимся с личной книгой макросов и синтаксисом написания команд для макроса.

Личная книга макросов

По умолчанию 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.

Правила написания команд в VBA

Любая команда макроса состоит из двух блоков, разделенных точкой:

Объект.Действие с объектом или свойство объекта

Объектами в Excel являются, например:

  •  книга: WorkBook, ActiveWorkbook;
  •  лист, листы: WorkSheet, ActiveSheet, Sheets;
  •  ячейка: Cells(1,1) — в скобках указываются номера строки (Row) и столбца (Column) ячейки на листе;
  •  диапазон ячеек (может быть и одна ячейка): Range(«А1:С5»), Range(«А1»);
  •  строки (Rows);
  •  столбцы (Columns);
  •  выделение (Selection) — выделенный в данный момент диапазон (это может быть как несколько смежных ячеек, так и смежные строки или столбцы).

Примеры действий с объектами:

  •  ActiveWorkbook.Save — сохранить рабочую книгу (та, которая была активна в момент вызова пользователем макроса);
  •  Sheets(«Лист3»).Name = «Отчет» — переименовать «Лист3» в «Отчет»;
  •  Sheets(«Отчет»).Activate — перейти на лист с названием «Отчет»;
  •  Range(«А1»).Copy — скопировать в буфер обмена данные из ячейки А1;
  •  Rows(«13:13»).Delete Shift:=xlUp — удалить строку 13 со сдвигом вверх.

Примеры свойств объектов:

  •  ActiveCell.FormulaR1C1 = «БДР» — в выделенной (активной) ячейке записан текст «БДР»;
  •  ActiveCell.Row < 65 — номер ряда активной ячейки меньше 65.

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

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

Selection.NumberFormat = «#,##0»

Суть его в следующем: к объекту Выделенный диапазон (у нас одна ячейка, но это может быть и весь столбец/строка или диапазон смежных ячеек) применяется свойство Числовой формат вида # ##0 (если помните, именно этот формат мы выбрали в списке).

Код макроса Форматирование_БДР и расшифровка строк кода представлены в таблице.

 

Строка кода

Расшифровка

Sub Форматирование_БДР()

Начало макроса, имя макроса

Пустая строка комментариев (ставится автоматически при записи макроса)

‘ Форматирование_БДР Макрос

Автоматически добавленный комментарий при записи макроса — может быть удален без потери работоспособности макроса

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

Автоматически добавленный комментарий при записи макроса из поля Описание

Пустая строка — не влияет на суть исполнения макроса, но их полезно добавлять для разделения блоков команд внутри кода

   Columns(«A:C»).Select

Выделить (Select) объект Столбцы (Columns) А:С

    Selection.AutoFilter

Применить автофильтр (AutoFilter) для выделенного диапазона (Selection)

    ActiveSheet.Range(«$A$1:$C$34″).AutoFilter Field:=1, Criteria1:=»<>*.*», _

Задать критерий отбора «не содержит точку»

        Operator:=xlAnd

Продолжение команды из предыдущей строки.

Обратите внимание: предыдущая строка закончилась символом нижнего подчеркивания _, значит, текст команды не уместился на одну строку и окончание команды перенесено на следующую

    Range(«A1:C34»).Select

Выделить (Select) объект Диапазон (Range) А1:С34.

Обратите внимание: какой бы длины ни был ваш следующий отчет, для которого вы будете применять этот макрос, выделится всегда только диапазон до 34 строки!

Как сделать этот диапазон любой длины — обсудим немного позже

    Selection.Font.Bold = True

Для выделенного диапазона (Объект Selection) установить свойство «полужирный шрифт» (Font.Bold = True). Если нужно отменить какое-то свойство, пишем False

    Selection.AutoFilter

Снять автофильтр (при записи макроса это было повторное нажатие кнопки Фильтр на закладке Данные)

    With ActiveSheet.PageSetup

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

Для объекта ActiveSheet (Текущий лист) применить следующие параметры свойства PageSetup (Параметры печати):

        .PrintTitleRows = «»

Печатать на каждой странице сквозные строки — пусто (то есть данное свойство не задано пользователем)

        .PrintTitleColumns = «»

Печатать на каждой странице сквозные столбцы — пусто

    End With

Окончание процедуры With

    ActiveSheet.PageSetup.PrintArea = «»

Заданная область печати — пусто (то есть пользователь не ограничил область печати, следовательно, на экран будет выведено все, что есть на листе)

    With ActiveSheet.PageSetup

Начало процедуры With

Для объекта Текущий лист применить следующие параметры печати (цветом выделены те, которые мы изменили по сравнению со стандартными):

        .LeftHeader = «»

Левый верхний колонтитул — пусто

        .CenterHeader = «Бюджет на январь»

Центральный верхний колонтитул — задан текст пользователем

        .RightHeader = «»

Правый верхний колонтитул — пусто

        .LeftFooter = «»

Левый нижний колонтитул — пусто

        .CenterFooter = «»

Центральный нижний колонтитул — пусто

        .RightFooter = «»

Правый нижний колонтитул — пусто

        .LeftMargin = Application.InchesToPoints(0.708661417322835)

Размеры левого поля

        .RightMargin = Application.InchesToPoints(0.708661417322835)

Размеры правого поля

        .TopMargin = Application.InchesToPoints(0.748031496062992)

Размеры верхнего поля

        .BottomMargin = Application.InchesToPoints(0.748031496062992)

Размеры нижнего поля

        .HeaderMargin = Application.InchesToPoints(0.31496062992126)

Размеры верхнего колонтитула

        .FooterMargin = Application.InchesToPoints(0.31496062992126)

Размеры нижнего колонтитула

        .PrintHeadings = False

Не печатать заголовки строк и столбцов (False — пользователь не отметил этот пункт)

        .PrintGridlines = False

Не печатать сетку

        .PrintComments = xlPrintNoComments

Не печатать примечания

        .PrintQuality = 600

Качество печати — 600 точек на дюйм

        .CenterHorizontally = True

Центрировать на странице горизонтально (True — пользователь отметил этот пункт)

        .CenterVertically = False

Не центрировать по вертикали

        .Orientation = xlPortrait

Ориентация страницы — книжная

        .Draft = False

Пользователь не отметил пункт Черновая в блоке Печать

        .PaperSize = xlPaperA4

Размер бумаги А4

        .FirstPageNumber = xlAutomatic

Номер первой страницы — автоматически

        .Order = xlDownThenOver

Последовательность вывода страниц: вниз, потом вправо (пункт в блоке Печать)

        .BlackAndWhite = False

Пользователь не отметил пункт Черно-белая в блоке Печать

        .Zoom = 75

Масштаб 75 %

        .PrintErrors = xlPrintErrorsDisplayed

Пункт в блоке ПечатьОшибки ячеекКак на экране

        .OddAndEvenPagesHeaderFooter = False

Пользователь не задавал разные колонтитулы для четных и нечетных страниц (флажок в блоке Колонтитулы)

        .DifferentFirstPageHeaderFooter = False

Пользователь не задавал отдельный колонтитул для первой страницы (флажок в блоке Колонтитулы)

        .ScaleWithDocHeaderFooter = True

Флажок в блоке Колонтитулы – Изменять вместе с масштабом страницы отмечен пользователем

        .AlignMarginsHeaderFooter = True

Флажок в блоке Колонтитулы – Выровнять относительно полей страницы отмечен пользователем

        .EvenPage.LeftHeader.Text = «»

Текст колонтитулов для четных и первой страниц не задан

        .EvenPage.CenterHeader.Text = «»

        .EvenPage.RightHeader.Text = «»

        .EvenPage.LeftFooter.Text = «»

        .EvenPage.CenterFooter.Text = «»

        .EvenPage.RightFooter.Text = «»

        .FirstPage.LeftHeader.Text = «»

        .FirstPage.CenterHeader.Text = «»

        .FirstPage.RightHeader.Text = «»

        .FirstPage.LeftFooter.Text = «»

        .FirstPage.CenterFooter.Text = «»

        .FirstPage.RightFooter.Text = «»

    End With

Окончание процедуры With

End Sub

Окончание кода макроса

Редактирование макроса

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

Sub Форматирование_БДР()

‘ Макрос выделяет жирным курсивом итоги, форматирует отчет на печать

‘——————

‘ Выделяем столбцы и ставим фильтр по столбцу КОД

 Columns(«A:C»).Select

 Selection.AutoFilter

 ActiveSheet.Range(«$A$1:$C$34″).AutoFilter Field:=1, Criteria1:=»<>*.*», _

 Operator:=xlAnd

‘ Выделяем отфильтрованный диапазон полужирным шрифтом, снимаем фильтр

 Range(«A1:C34»).Select

 Selection.Font.Bold = True

 Selection.AutoFilter

 ‘ Форматируем на печать: верхний колонтитул, центрирование по горизонтали, масштаб 75 %

 With ActiveSheet.PageSetup

 .CenterHeader = «Бюджет на январь»

 .CenterHorizontally = True

 .Zoom = 75

 End With

End Sub

Ввод в код макроса функций и процедур

Теперь усложним код макроса, задав ему два параметра:

1. Название месяца отчета запрашиваем у пользователя.

2. Последняя строка отчета БДР (в случае если она плавающая) рассчитывается в коде макроса.

Функция InputBox

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

Zapros = InputBox(«Текст запроса», <«Текст в шапке окна»>, <Значение по умолчанию>,…)

где Zapros — введенная вами переменная (имя придумываете вы сами), а в скобках через запятую перечисляются аргументы функции.

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

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

Важно

Имена вводимых переменных не должны совпадать с уже занятыми VBA словами под название объектов, свойств или функций!

В нашем примере присвоим результат вызова функции InputBox переменной Mes.

Например, нельзя завести свою переменную Range, Cells или Month — компилятор VBA предупредит вас, что делать этого нельзя, и не запустит макрос, пока вы не устраните ошибку (рис. 6).

Рис. 6. Пример ошибки при заведении переменной

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

Итак, приступим к редактированию кода макроса. Добавим в самое начало кода макроса строки:

‘ Запрашиваем у пользователя месяц отчета

Mes = InputBox(«Введите название месяца отчета», , «Январь»)

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

Рис. 7. Диалоговое окно для указания месяца

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

Процедура While

Используется в коде, если надо сделать одинаковые действия несколько раз подряд до тех пор, пока выполняется какое-либо условие. Синтаксис процедуры While:

Do While <условие, которое должно быть верным для выполнения процедуры>

 <список команд>

Loop

Условие может состоять из одного выражения или содержать несколько, перечисленных через оператор AND (то есть оба условия должны быть выполнены) или OR (достаточно выполнения только одного из перечисленных условий). Также условие обязательно должно содержать переменную-счетчик (это может быть номер строки или столбца ячейки, значения которой вы проверяете).

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

Если макрос ушел в цикл, прервите его с помощью комбинации клавиш Ctrl+Break и либо прекратите макрос (кнопка End), либо зайдите в код макроса и исправьте ошибку (кнопка Debug). Чтобы макрос не уходил в цикл, рекомендуется включить в блок условий «защиту от дурака». Например, добавляем в условие проверку, чтобы значение счетчика не превышало определенной, заведомо достаточной для нас величины.

Рассмотрим применение процедуры While для поиска конца отчета БДР.

Как видно на рис. 4, последняя строка отчета имеет код «500». Напишем процедуру, которая будет проверять значения в ячейках столбца «А» и остановит свои действия, когда найдет ячейку с кодом «500».

Обратите внимание!

Excel иногда воспринимает числа как текст, поэтому включим два условия проверки значения ячейки и добавим «защиту от дурака» на случай, если в форме отчета случайно затрется код последней строки.

Помним, что все текстовые значения надо брать в кавычки. Числа записываем без кавычек:

‘ Ищем последнюю строку отчета

Dim Row_End As Integer     ‘ Вводим переменную «счетчик номера строки»

Row_End = 1             ‘ Присваиваем ей номер 1

‘ Начинаем процедуру поиска последней строки отчета по коду «500»

Do While Cells(Row_End, 1).Value <> «500» And Cells(Row_End, 1).Value <> 500 And Row_End < 100

‘ До тех пор, пока код не равен 500 и номер строки меньше 100, выполняем наращивание счетчика

Row_End = Row_End +1

Loop

Таким образом, процедура While нам нужна только для наращивания счетчика — никаких дополнительных действий она не производит. Запомните этот прием — он часто нужен в кодировании.

Теперь заменим в изначальном коде макроса номер последней ячейки (34) на переменную Row_End. Число 34 было частью текста А1:С34, а теперь нам надо часть текста заменить на переменную. Делается это с помощью символа амперсанд &:

«текст» & переменная & «текст».

В нашем случае ссылка на диапазон А1:С34 будет записана так: А1:С & Row_End.

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

Не забывайте оставлять пробелы в кавычках перед переменной-словом, иначе текст сольется.

Еще раз взглянем на получившийся код макроса:

Sub Форматирование_БДР()

‘ Макрос выделяет жирным курсивом итоги, форматирует отчет на печать

‘ ——————

‘ Запрашиваем у пользователя месяц отчета

Mes = InputBox(«Введите название месяца отчета», , «Январь»)

‘ Ищем последнюю строку отчета

Dim Row_End As Integer     ‘ Вводим переменную «счетчик номера строки»

Row_End = 1             ‘ Присваиваем ей номер 1

‘ Начинаем процедуру поиска последней строки отчета по коду «500»

‘ Критичным значением для «защиты от дурака» принимаем номер строки 100

Do While Cells(Row_End, 1).Value <> «500» And Cells(Row_End, 1).Value <> 500 And Row_End < 100

‘ До тех пор, пока код не равен 500 и номер строки меньше 100, выполняем наращивание счетчика

Row_End = Row_End +1

Loop

‘ Выделяем столбцы и ставим фильтр на КОД

 Columns(«A:C»).Select

 Selection.AutoFilter

 ActiveSheet.Range(«$A$1:$C$» & Row_End).AutoFilter Field:=1, Criteria1:=»<>*.*», _

 Operator:=xlAnd

‘ Выделяем отфильтрованный диапазон полужирным шрифтом, снимаем фильтр

 Range(«A1:C» & Row_End).Select

 Selection.Font.Bold = True

 Selection.AutoFilter

‘ Форматируем на печать: верхний колонтитул, центрирование по горизонтали, масштаб 75 %

 With ActiveSheet.PageSetup

 .CenterHeader = «Бюджет на » & Mes

 .CenterHorizontally = True

 .Zoom = 75

 End With

End Sub

Теперь макрос стал более универсальным. Добавим в него еще одну «защиту от дурака».

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

Для этого изучим функцию MsgBox, процедуру IF и команду Exit Sub.

Функция MsgBox

MsgBox — еще один способ общения с пользователем: сообщения ему какой-то информации по ходу выполнения макроса или запрос у него подтверждения по дальнейшим действиям макроса путем нажатия на кнопки вида Yes, No, Ок, Cancel.

Она имеет два вида записи:

1. Мы просто сообщаем пользователю какую-то информацию. В этом случае аргументы функции перечисляются сразу же за функцией, без использования скобок:

MsgBox «Текст сообщения», <Вид кнопок>, <«Текст в шапке окна»>,…

На экране отобразится диалоговое окно, и после нажатия пользователем кнопки Ок продолжится выполнение макроса (рис. 8).

Рис. 8. Первый вид записи функции MsgBox

Как и в случае с функцией InputBox, обязательным здесь является только первый аргумент — Текст сообщения. Остальные можно даже не указывать, сократив вид записи функции до вида:

2. Нам важно, что ответил пользователь, мы записываем его ответ в значение какой-то переменной (рис. 9). В этом случае аргументы функции заключаются в скобки, а перед функцией обязательно должна стоять переменная, в которую мы записываем, на какую кнопку нажал пользователь:

YesNo = MsgBox(«Текст сообщения», <Вид кнопок>, <«Текст в шапке окна»>,…)

Рис. 9. Второй вид записи функции MsgBox

Варианты вида кнопок:

  •  vbOKOnly — только кнопка ОК;
  •  vbOKCanсel — кнопки ОК и Cancel;
  •  vbYesNo — кнопки Yes и No;
  •  vbYesNoCancel — кнопки Yes, No и Cancel.

Соответственно в зависимости от нажатой кнопки значения функции MsgBox могут быть vbOK, vbCancel, vbYes или vbNo.

Процедура If

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

If <условие, которое должно быть верным> Then

 <список команд при выполнении указанного условия>

else

 <список команд при невыполнении указанного условия>

End If

Обязательным к заполнению является только условие. Список команд в обоих блоках заполнять не обязательно. В зависимости от ваших задач вы можете заполнить оба блока или только один из них. Условие может состоять из одного выражения или содержать несколько выражений, перечисленных через оператор AND (то есть оба условия должны быть выполнены) или оператор OR (достаточно выполнения только одного из перечисленных условий).

Команда Exit Sub

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

Итак, объединим новые знания в код «защиты от дурака» и запишем его после строки Loop:

‘ Проверяем, дошла ли процедура While до «критичной» строки 100

‘ и спрашиваем подтверждение о продолжении выполнения макроса

If Row_End = 100 Then      

YesNo = MsgBox(«Поиск последней строки отчета дошел до 100, продолжаем?», vbYesNo)

If YesNo = vbNo Then          ‘ Если нажата кнопка «No», то…

MsgBox «Процедура прервана пользователем»   ‘ 1. выдаем сообщение для пользователя,

Exit Sub          ‘ 2. останавливаем макрос

End If

End If

В нашем коде прошло вложение одной процедуры If в другую:

  •  сначала мы проверили, дошел ли счетчик Row_End до значения 100;
  •  если дошел, мы спрашиваем у пользователя, продолжать ли нам выполнение макроса;
  •  если пользователь ответил «нет», останавливаем макрос.

В обеих процедурах If мы опустили второй блок (else): если Row_End не достиг значения 100 или пользователь ответил «да», макрос просто покинет процедуру If и продолжит выполнять команды, написанные ниже.

Каждая процедура If должна заканчиваться командой End If. Если количество строк с командой If не будет соответствовать количеству строк с командой End If, компилятор VBA сообщит об ошибке и вам придется искать, где вы потеряли конец процедуры If.

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

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

Подведем итоги

Мы с вами научились:

  •  записывать макросы через команду Вид  Макросы  Запись макроса;
  •  редактировать автоматически записанный макрос, удалять из него лишние команды;
  •  унифицировать код макроса, вводя в него переменные, которые макрос запрашивает у пользователя или рассчитывает самостоятельно,

а также изучили функции InputBox и MsgBox, процедуры While и If, команду Exit Sub.

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


Статья опубликована в журнале «Справочник экономиста» № 4, 2016.

Самоучитель по Excel VBA

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

​ программирования. К особенностям​Данный учебник является введением​ использовать макрос внутри​Макросы​, которая используется как​ макрос, который делает​Sub​ флажок​ ячеек в таблице​ который требуется удалить,​ или столбцов, а​ ячейки, поэтому нет​ них является Format.​ координатами (1,1) было​ записаны квадраты номера​ находится между строками​ с изображением floppy​ VBA относится выполнение​ в язык программирования​ файла одной рабочей​и при помощи​ хранилище макросов. Все​ то, что Excel​, за которым идет​Разработчик (Developer)​ Excel.​

  • ​ и нажмите кнопку​
  • ​ также выделение ячеек​ необходимости их присваивания​
  • ​ Она возвращает значение​
  • ​ записано:​ соответствующей строки. Использование​
  • ​ Sub Макрос1() и​
  • ​ disk;​
  • ​ скрипта в среде​ Excel VBA (Visual​
  • ​ книги. В случаи,​ кнопки​
  • ​ макросы из​ никогда не умел​
  • ​ имя макроса и​
  • ​. Теперь на появившейся​

​Практический пример и​ «Удалить».​ путем перетаскивания указателя​ переменным.​

​ типа Variant с​1, если аргумент положительный;​
​ конструкции For позволит​
​ End Sub.​

​пишут, скажем так, набросок​

office-guru.ru

VBA Excel: примеры программ. Макросы в Excel

​ офисных приложений.​ Basic for Applications).​ когда необходимо использовать​Добавить (Add)​Personal.xls​ (сортировку по цвету,​ список аргументов (входных​ вкладке нам будут​ пошаговый разбор исходного​К началу страницы​ мыши. Команды для​Перед запуском созданной программы,​ выражением, отформатированным согласно​0, если аргумент нулевой;​ записать ее очень​Если копирование было выполнено,​ кода.​Недостатком программы являются проблемы,​

VBA Excel примеры программ

Что такое VBA

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

​ VBA-кода макроса для​VBA коды для​ записи, создания и​ требуется сохранить рабочую​ инструкциям, которые заданы​-1, если аргумент отрицательный.​ коротко, без использования​ например, из ячейки​Он выглядит следующим образом:​ связанные с совместимостью​ сможете создавать макросы​

​ в других файлах​ в правую половину​ при старте Excel​ подобное).​ Если аргументов нет,​ для работы с​ автоматического объединения повторяющихся​ простых программ макросов​ удаления макросов доступны​ книгу, например, под​ в описании формата.​Создание такого макроса для​ счетчика.​ А1 в ячейку​Sub program ()​ различных версий. Они​ и выполнять в​ рабочих книг, тогда​ окна, т.е. на​ и могут быть​Если во время записи​ то скобки надо​

функции VBA

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

​ макросами, в том​ одинаковых ячеек в​ необходимых при работе​ на вкладке ленты​ названием «Отчет1.xls».​и пр.​ «Эксель» начинается стандартным​Сначала нужно создать макрос,​ C1, то одна​’Наш код​ обусловлены тем, что​ Excel практически любые​ можно сохранить его​

​ панель быстрого доступа:​ запущены в любой​ макроса макрорекордером вы​ оставить пустыми.​ числе и нужная​ строках таблицы. 1​ с таблицами на​Разработчик​Клавишу «Создать отчетную таблицу»​Изучение свойств этих функций​

​ способом, через использование​ как описано выше.​ из строк кода​End Sub​ код программы VBA​ задачи. Вы очень​ в личной книге​Кнопка на листе​

​ момент и в​ ошиблись — ошибка​Любой макрос должен заканчиваться​ нам кнопка​ 2 3 4​ каждый день.​

​.​ требуется нажать всего​ и их применение​ «горячих» клавиш Alt​ Далее записываем сам​ будет выглядеть, как​Обратите внимание, что строка​ обращается к функциональным​ скоро поймёте, что​ макросов. У нее​Этот способ подходит для​ любой книге.​ будет записана. Однако​ оператором​Редактор Visual Basic​

​Всем нам приходится -​Макрос для копирования листа​Если вкладка​ 1 раз после​

циклы VBA

Как начать

​ позволит значительно расширить​ и F11. Далее​ код. Считаем, что​ Range(“C1”).Select. В переводе​ «’Наш код» будет​ возможностям, которые присутствуют​

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

  • ​End Sub​(Visual Basic Editor)​ кому реже, кому​ в Excel c​Разработчик​
  • ​ ввода заголовочной информации.​
  • ​ сферу применения «Эксель».​ записывается следующий код:​ нас интересуют значения​
  • ​ это выглядит, как​ выделена другим цветом​

​ в новой версии​

​ уйму времени благодаря​

​ – Personal.xlsb. Она​

​ Мы добавим кнопку​

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

​Попробуем перейти к решению​Sub program()​ для 10 ячеек.​ «Диапазон(“C1”).Выделить», иными словами​ (зеленым). Причина в​ продукта, но отсутствуют​ автоматизации повторяющихся задач​ всегда открывается при​ запуска макроса прямо​ необходимо записать, запись​ последнего действия (Undo)​Все, что находится между​К сожалению, интерфейс редактора​ одни и те​

Макросы в Excel

​Практический пример с​ ниже действия, чтобы​ другие правила. В​ более сложных задач.​x= Cells(1, 1).Value (эта​ Код выглядит следующим​ осуществляет переход в​ апострофе, поставленном в​ в старой. Также​ и обеспечить гибкое​ запуске программы Excel,​ на рабочий лист,​ можно остановить командой​ — во время​Sub​ VBA и файлы​ же действия и​ описанием и исходным​ открыть ее.​ частности, кнопка «Добавить​

Пример 1

​ Например:​ команда присваивает x​ образом.​ VBA Excel, в​ начале строки, который​

​ к минусам относят​

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

​ записи макроса макрорекордером​и​ справки не переводятся​ операции в Excel.​ кодом макроса для​Выберите​ строку» должна нажиматься​Дан бумажный документ отчета​ значение содержимого ячейки​

​For i = 1​ ячейку С1.​ обозначает, что далее​ и чрезмерно высокую​ пользователями.​ книга не является​ Для этого:​(Stop Recording)​ она не просто​

​End Sub​

  • ​ компанией Microsoft на​ Любая офисная работа​
  • ​ одновременного копирования любого​Excel​
  • ​ каждый раз после​ фактического уровня издержек​ с координатами (1,​

​ to 10 Next​Активную часть кода завершает​ следует комментарий.​ открытость кода для​

​Этот учебник не является​ доступной по умолчанию​В Excel 2003 и​.​ возрвращает Вас в​- тело макроса,​ русский язык, поэтому​ предполагает некую «рутинную​ количества рабочих листов.​>​ ввода в таблицу​ предприятия. Требуется:​

​ 1))​Команда переводится на «человеческий»​ команда ActiveSheet.Paste. Она​Теперь вы можете написать​ изменения посторонним лицом.​ исчерпывающим руководством по​ в Excel, поэтому​ старше — откройте​Управление всеми доступными макросами​ предыдущее состояние, но​ т.е. команды, которые​ с английскими командами​

​ составляющую» — одни​Макрос для выделения и​настройки​ значений по каждому​разработать его шаблонную часть​If x>0 Then Cells(1,​ язык, как «Повторять​

Пример 2

​ означает запись содержания​ любой код и​ Тем не менее​

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

​ виду деятельности. После​ посредством табличного процессора​ 1).Value = 1​ от 1 до​ выделенной ячейки (в​ создать для себя​ Microsoft Office, а​ VBA. Его цель​ подключить.​

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

​панель инструментов и ленты​

​ занесения всех данных​

​ «Эксель»;​

​If x=0 Then Cells(1,​

​ 10 с шагом​

​ данном случае А1)​ новый инструмент в​ также IBM Lotus​ – помочь начинающему​Чтобы создать и схоронить​

​через меню​ с помощью кнопки​

​ VBA.​ данном случае макрос​Макросы (т.е. наборы команд​ и те же​

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

​ 1).Value = 0​ один».​

​ в выделенную ячейку​ VBA Excel (примеры​ Symphony позволяют пользователю​

​ специалисту освоить написание​

​ код в личной​

​Вид — Панели инструментов​Макросы (Macros)​Чтобы включить запись необходимо:​ выделяет ячейку заливает​ на языке VBA)​ действия по обработке​ и добавление пустых​В разделе​

​ «Закончить» и затем​ будет запрашивать исходные​If x​

программирование в Excel

Пример 3

​Если ставится задача получить​ С1.​ программ см. далее).​ применять шифрование начального​ макросов в Excel​ книге макросов:​ — Формы (View​

​на вкладке​в Excel 2003 и​ выделенных диапазон (Selection)​ хранятся в программных​ поступивших данных, заполнение​ столбцов в таблицу​Настройка ленты​ переключиться в окно​ данные для ее​

​End Sub.​ столбец с квадратами,​Циклы VBA помогают создавать​ Конечно, тем, кто​ кода и установку​ при помощи кода​Выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Запись макроса».​ — Toolbars -​

​Разработчик (Developer)​ старше — выбрать​

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

​ «Эксель».​ заполнения, осуществлять необходимые​Остается запустить макрос и​ например, всех нечетных​ различные макросы в​ знаком с азами​

​ пароля для его​ VBA. Для желающих​В появившемся диалоговом окне​

​ Forms)​или — в​ в меню​ = 6) и​ книге Excel мы​ бланков и т.д.​ с помощью макросов.​

​Основные вкладки​Теперь вы знаете, как​ расчеты и заполнять​ получить в «Эксель»​ чисел из диапазона​ Excel.​ Visual Basic, будет​ просмотра.​ изучить этот язык​ «Запись макроса», из​В Excel 2007 и​

​ старых версиях Excel​Сервис — Макрос -​

​ затем проходит в​

​ можем создать любое​ Использование макросов и​ Исходные коды предоставляться​и установите флажок​ решать задачи для​ ими соответствующие ячейки​

​ нужное значение для​ от 1 до​Циклы VBA помогают создавать​ намного проще. Однако​Именно с этими понятиями​

​ программирования более глубоко​ выпадающего списка «Сохранить​ новее — откройте​ — через меню​

​ Начать запись​

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

примеры макросов VBA Excel

Пример 4

​ нужно разобраться тем,​ существуют отличные книги​ в:» выберите опцию​ выпадающий список​Сервис — Макрос -​(Tools — Macro -​ ячейкам, заменяя формулы​ и разместить там​ автоматизировать эти операции,​ примерами в картинках.​.​ макросов. Умение применять​Рассмотрим один из вариантов​Как вы уже могли​For i = 1​ что имеется функция​ их не имеет,​

​ кто собирается работать​ по Excel VBA.​ «Личная книга макросов».​Вставить (Insert)​ Макросы​ Record New Macro)​

​ на значения. В​

​ наши макросы. Один​

​ перекладывая монотонную однообразную​

​Макрос для выделения и​Нажмите кнопку​ vba excel (примеры​ решения.​ заметить, программировать в​ to 10 step​

​ y=x + x2​

​ при желании смогут​ в среде VBA.​ Далее приведено содержание​ И нажмите на​на вкладке​

​(Tools — Macro -​в Excel 2007 и​

​ конце выводится окно​ модуль может содержать​

​ работу на плечи​

​ удаления пустых строк​

​Сохранить​ программ см. выше)​Все действия осуществляются на​ самом известном табличном​

Функции VBA

​ 1 Next.​ + 3×3 –​ освоиться достаточно быстро.​ Прежде всего необходимо​ самоучителя по Excel​ кнопку OK.​Разработчик (Developer)​ Macros)​ новее — нажать​ сообщения (MsgBox).​ любое количество макросов.​ Excel. Другим поводом​ в Excel.​и закройте​ может понадобиться и​ стандартном листе в​

  • ​ процессоре Microsoft не​Здесь step — шаг.​ cos(x). Требуется создать​За таким названием скрываются​ понять, что такое​
  • ​ Visual Basic. Для​Теперь выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Остановить​ ​:​ кнопку​С ходу ясно, что​ Доступ ко всем​
  • ​ для использования макросов​Примеры макросов с​Параметров Excel​
  • ​ для работы в​ Excel. Резервируются свободные​ так уж сложно.​ В данном случае​ макрос для получения​ программы, написанные на​ объект. В Excel​ начинающих программистов настоятельно​ запись».​Выберите объект​Любой выделенный в списке​Запись макроса (Record macro)​ вот так сразу,​ модулям осуществляется с​ в вашей работе​ исходными кодами для​.​
  • ​ среде самого популярного​ ячейки для внесения​ Особенно, если научиться​ он равен двум.​ ее графика. Сделать​
  • ​ языке Visual Basic​ в этом качестве​ рекомендуется начать с​Откройте редактор Visual Basic:​Кнопка (Button):​ макрос можно запустить​на вкладке​ без предварительной подготовки​ помощью окна Project​ может стать необходимость​ удаления, выделения, добавления​На вкладке​ на данный момент​
  • ​ данных по месяцу,​ применять функции VBA.​ По умолчанию отсутствие​ это можно только,​ for Application. Таким​
  • ​ выступают лист, книга,​ первого раздела учебника​ «РАЗРАБОТЧИК»-«Код»-«Visual Basic». Или​Затем нарисуйте кнопку на​ кнопкой​Разработчик (Developer)​ и опыта в​
  • ​ Explorer в левом​

​ добавить в Microsoft​ и скрытия пустых​Разработчик​ текстового редактора «Ворд».​

Пример 5

​ году, названию компании-потребителя,​ Всего в этом​ этого слова в​

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

  • ​ и изучать их​ нажмите комбинацию горячих​ листе, удерживая левую​
  • ​Выполнить​Затем необходимо настроить параметры​ программировании вообще и​ верхнем углу редактора​ Excel недостающие, но​ строк в исходной​нажмите кнопку​

​ В частности, можно​ сумме издержек, их​

Создание шаблона

​ языке программирования, созданном​ цикле означает, что​За начальное и конечное​ Excel — это​ Данные объекты обладают​ по порядку. Те,​ клавиш ALT+F11. В​ кнопку мыши. Автоматически​(Run)​ записываемого макроса в​ на VBA в​ (если его не​ нужные вам функции.​ таблице данных. ​Запись макроса​ путем записи, как​ уровня, товарооборота. Так​ специально для написания​

Переменные

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

  • ​ окне «Project-VBAProject», в​ появится окно, где​
  • ​.​ окне​ частности, сложновато будет​
  • ​ видно, нажмите CTRL+R).​ Например функцию сборки​Макрос для выделения ячеек​
  • ​.​ показано в самом​ как количество компаний​

​ приложений в «Эксель»​Полученные результаты нужно сохранять​ берут x1=0 и​ нужным кодом. Благодаря​ подчиняются друг другу.​ в программировании на​ дереве проектов появиться​ нужно выбрать макрос,​

макросы в Excel

Решение задачи с использованием программирования на VBA

​Кнопка​Запись макроса​ сообразить какие именно​ Программные модули бывают​ данных с разных​ со снятой защитой​Примечание:​ начале статьи, или​ (обществ), относительно которых​

​ и Word, около​ в ячейки с​ x2=10. Кроме того,​ этой возможности табличный​

​Главным из них является​ VBA, могут сразу​ доступная еще одна​ который должен запускаться​Параметры​

​:​ команды и как​ нескольких типов для​ листов на один​ на листе Excel.​ Чтобы создать макрос из​ через написание кода​ составляется отчет, не​

​ 160 функций. Их​ номером (i,1). Тогда​ необходимо ввести константу​ процессор Microsoft саморазвивается,​ Application, соответствующий самой​

​ же перейти к​ книга Personal.xlsb. Кликните​ при щелчке по​(Options)​

​Имя макроса​ надо вводить, чтобы​ разных ситуаций:​ итоговый лист, разнесения​Исходный код с​ VBE, щелкните​ создавать кнопки меню,​ зафиксировано, ячейки для​ можно разделить на​ при каждом запуске​ — значение для​ подстраиваясь под требования​ программе Excel. Затем​ интересующим темам.​ на «плюсик» слева​ нарисованной кнопке.​позволяет посмотреть и​

VBA Excel 2010

​- подойдет любое​ макрос автоматически выполнял​Обычные модули​ данных обратно, вывод​ примером и описанием​Visual Basic​ благодаря которым многие​ внесения значений по​ несколько больших групп.​ цикла с увеличением​ шага изменения аргумента​ конкретного пользователя. Разобравшись​ следуют Workbooks, Worksheets,​Часть 1: Оформление кода​ на против этой​Создание пользовательских функций или,​ отредактировать сочетание клавиш​ имя на русском​ все действия, которые,​- используются в​ суммы прописью и​ для VBA-макроса выделения​. В окне кода​ операции над текстом​

​ итогам и ФИО​

fb.ru

Создание и удаление макросов в Excel для Mac с помощью вкладки «Разработчик»

​ Это:​​ i на величину​ и начальное значение​ с тем, как​ а также Range.​Часть 2: Типы данных,​ книги, чтобы раскрыть​ как их иногда​ для быстрого запуска​ или английском языке.​ например, Вы делаете​ большинстве случаев, когда​ т.д.​ ячеек у которых,​ модуля введите код​ можно будет осуществлять​ специалиста заранее не​Математические функции. Применив их​ шага автоматически будет​ для счетчика.​ создавать модули для​

​ Например, для обращения​ переменные и константы​ проект книги Personal.xlsb.​ еще называют, UDF-функций​ макроса.​ Имя должно начинаться​ для создания еженедельного​ речь идет о​Макрос​ снятая защита от​ макроса.​ нажатием дежурных клавиш​ резервируют. Рабочему листу​ к аргументу, получают​ расти и номер​Все примеры макросов VBA​ написания макросов, можно​ к ячейке A1​Часть 3: Массивы​

Запись макроса

​ А после двойным​ (User Defined Functions)​Кнопка​ с буквы и​ отчета для руководства​ макросах. Для создания​- это запрограммированная​ ввода значений данных​В поле​ или через вкладку​ присваивается новое название.​ значение косинуса, натурального​ у строки. Таким​ Excel создаются по​ приступать к рассмотрению​ на конкретном листе​Часть 4: Процедуры Function​​ щелчком отройте ее​​ принципиально не отличается​

  1. ​Изменить​​ не содержать пробелов​​ компании. Поэтому мы​ такого модуля выберите​ последовательность действий (программа,​

    1. ​ и редактирования.​​Имя макроса​​ «Вид» и пиктограмму​​ Например, «Օтчет».​​ логарифма, целой части​​ образом, произойдет оптимизация​​ той же процедуре,​

    2. ​ конкретных примеров программ​​ следует указать путь​​ и Sub​​ Module1.​​ от создания макроса​​(Edit)​​ и знаков препинания.​

    3. ​ переходим ко второму​​ в меню​​ процедура), записанная на​​Макрос для поиска ячеек​​введите имя макроса.​

    Настройка вкладки

  2. ​ «Макросы».​​Для написания программы автоматического​​ и пр.​​ кода.​​ которая представлена выше.​

    ​ VBA Excel. Лучше​​ с учетом иерархии.​Часть 5: Условные операторы​​В результате откроется окно​​ в обычном программном​открывает редактор Visual​Сочетание клавиш​

    Запись макроса в Excel для Mac

  3. ​ способу создания макросов,​​Insert — Module​​ языке программирования Visual​

    ​ в Excel с​Первым символом имени макроса​Автор: Наира​ заполнения шаблона, необходимо​Финансовые функции. Благодаря их​В целом код будет​ В данном конкретном​ всего начать с​Что касается понятия «коллекция»,​Часть 6: Циклы​ кода модуля с​ модуле. Разница только​ Basic (см. выше)​- будет потом​ а именно…​. В появившееся окно​

  4. ​ Basic for Applications​​ выпадающим списком и​​ должна быть буква.​​Примечание:​​ выбрать обозначения. Они​

  5. ​ наличию и используя​​ выглядеть, как:​​ случае код выглядит,​ самых элементарных кодов.​ то это группа​

    Форма для записи макросов в Excel для Mac

    ​Часть 7: Операторы и​​ зарегистрированным макросом. Удалите​ в том, что​ и позволяет просмотреть​ использоваться для быстрого​Макрорекордер​ нового пустого модуля​

  6. ​ (VBA). Мы можем​ условным форматированием.​​ Последующие символы могут​​ Мы стараемся как можно​​ будут использоваться для​​ программирование в Excel,​

  7. ​Sub program()​

  8. ​ как:​​Задача: написать программу, которая​​ объектов того же​​ встроенные функции​​ его код и​

​ макрос выполняет последовательность​

Удаление макроса

  1. ​ и отредактировать текст​​ запуска макроса. Если​​- это небольшая​​ можно вводить команды​​ запускать макрос сколько​

  2. ​Исходный VBA-код макроса​ быть буквами, цифрами​ оперативнее обеспечивать вас​ переменных:​

    Выберите макрос и щелкните знак минуса, чтобы удалить его.

​ можно получать эффективные​

support.office.com

Запуск и создание макросов в Excel для чайников

​For i = 1​Sub programm()​ будет копировать значение​ класса, которая в​Часть 8: Объектная модель​

Создание и выполнение макросов

makros-kopirovanie-lista​ введите код своего​ действий с объектами​ макроса на VBA.​
​ забудете сочетание или​ программа, встроенная в​ на VBA, набирая​ угодно раз, заставляя​ для поиска выпадающих​makros-udaleniya-pustyh-stolbcov​ или знаками подчеркивания.​ актуальными справочными материалами​NN– номер текущей строки​
​ инструменты для ведения​ To 10 Step​x1 = 1​ содержимое одной ячейки​ записи имеет вид​ Excel​ макроса. Выберите инструмент​ книги (ячейками, формулами​makros-udaleniya-pustyh-strok​Чтобы не запоминать сочетание​ вообще его не​ Excel, которая переводит​
​ их с клавиатуры​ Excel выполнять последовательность​ списков на рабочем​ В имени макроса​ на вашем языке.​ таблицы;​makros-dlya-yacheek-so-snyatoy-zashchitoy​ бухгалтерского учета и​ 1 (можно записать​x2 = 10​
​ и затем записывать​ ChartObjects. Ее отдельные​Часть 9: События в​ в редакторе макросов:​ и значениями, листами,​ клавиш для запуска​ введете, то макрос​makros-poiska-yacheyki​ любое действие пользователя​ или копируя их​ любых нужных нам​ листе. Исходный код​
​ не должно содержаться​ Эта страница переведена​TP и TF –​ осуществления финансовых расчетов.​ просто For i​shag = 0.1​ в другую.​makros-dlya-vydeleniya-yacheek-po-usloviyu​ элементы также являются​ Excel​ «File»-«Save Personal.xlsb», а​
​ диаграммами и т.д.),​ макроса, лучше создать​ можно будет запустить​ на язык программирования​ из другого модуля,​ действий, которые нам​makros-dlya-vydeleniya-yacheek​ VBA-макроса для поиска​ пробелов; в качестве​ автоматически, поэтому ее​
​ планируемый и фактический​Функции обработки массивов. К​ = 1 To​i = 1​Для этого:​ объектами.​Часть 10: Ошибки VBA​makros-dlya-dobavleniya-strok​ потом закройте редактор​ а пользовательская функция​ кнопку и назначить​
​ через меню​ VBA и записывает​ с этого сайта​ не хочется выполнять​ ячеек с условным​ разделителей слов следует​ текст может содержать​ товарооборот;​izmenit-granicy-makrosom​ ним относятся Array,​ 10)​Do While x1 <​
​открывают вкладку «Вид»;​Следующее понятие — свойства.​Примеры по VBA​ Visual Basic.​ — только с​ ей нужный макрос.​Сервис — Макрос -​ получившуюся команду в​makros-obedineniya-povtoryayushchihsya-yacheek​ или еще откуда​ вручную.​ форматированием.​
​ использовать знаки подчеркивания.​ неточности и грамматические​SF и SP –​ IsArray; LBound; UBound.​Cells(i, 1).Value = i​ x2 (цикл будет​переходят на пиктограмму «Макросы»;​

exceltable.com

Создание макросов и пользовательских функций на VBA

Введение

​ Они являются необходимой​Более подробное описание по​​ теми значениями, которые​ Кнопка может быть​ Макросы — Выполнить​ программный модуль. Если​ нибудь:​В принципе, существует великое​Макрос для выделения ячеек​ Если используется имя​ ошибки. Для нас​ фактическая и планируемая​Функции VBA Excel для​ ^ 2 (т.е.​ выполняться пока верно​жмут на «Запись макроса»;​ характеристикой любого объекта.​ Excel VBA можно​Теперь у вас подключена​ мы передадим ей​ нескольких типов:​(Tools — Macro -​ мы включим макрорекордер​Модуль Эта книга​ множество языков программирования​ Excel по условию​ макроса, являющееся ссылкой​ важно, чтобы эта​ сумма издержек;​ строки. Это достаточно​ в ячейку (i,1)​ выражение x1 <​заполняют открывшуюся форму.​ Например, для Range​

​ найти на сайте​​ скрытая книга для​ как аргументы (исходные​Кнопка на панели инструментов​ Macros — Run)​ на запись, а​- также виден​ (Pascal, Fortran, C++,​ больше меньше.​ на ячейку, может​ статья была вам​IP и IF –​ многочисленная группа. В​ записывается значение квадрата​

​ x2)​Для простоты в поле​ — это Value​ Microsoft Office.​ хранения макросов, к​ данные для расчета).​ в Excel 2003​или с помощью​ затем начнем создавать​ в левом верхнем​ C#, Java, ASP,​2 исходных кода​ появиться сообщение об​ полезна. Просим вас​

Способ 1. Создание макросов в редакторе Visual Basic

​ планируемый и фактически​ нее входят, например,​ i)​y=x1 + x1^2 +​ «Имя макроса» оставляют​ или Formula.​Урок подготовлен для Вас​

  • ​ которым можно получить​Чтобы создать пользовательскую функцию​ и старше​ кнопки​​ свой еженедельный отчет,​ углу редактора Visual​ ​ PHP…), но для​ макросов для выделения​​ ошибке, указывающее на​
  • ​ уделить пару секунд​ уровень издержек.​ функции Space для​Next (в некотором смысле​​ 3*x1^3 – Cos(x1)​​ «Макрос1», а в​​Методы — это команды,​ командой сайта office-guru.ru​ доступ из любой​ для расчета, например,​​Откройте меню​Макросы (Macros)​ то макрорекордер начнет​​ Basic в окне,​​ всех программ пакета​ ячеек по условию​ недопустимое имя макроса..​ и сообщить, помогла​Обозначим теми же буквами,​ создания строки с​ играет роль счетчика​​Cells(i, 1).Value = x1​ ​ поле «Сочетание клавиш»​

    Макросы вȎxcel†16 для чайников с примерами​ показывающие, что требуется​

​Источник: http://www.excelfunctions.net/Excel-VBA-Tutorial.html​ другой рабочей книги.​ налога на добавленную​Сервис — Настройка​на вкладке​ записывать команды вслед​ которое называется Project​ Microsoft Office стандартом​

Макросы вȎxcel†16 для чайников с примерами

​ больше равно или​В списке​ ли она вам,​ но с «приставкой»​ числом пробелов, равных​ и означает еще​ (значение x1 записывается​ вставляют, например, hh​ сделать. При написании​Перевел: Антон Андронов​ Личная книга макросов​ стоимость (НДС) откроем​(Tools — Customize)​Разработчик (Developer)​ за каждым нашим​ Explorer. В этот​ является именно встроенный​ меньше равно относительно​Сохранить в​ с помощью кнопок​ Itog накопление итога​

  • ​ целочисленному аргументу, или​​ один запуск цикла)​ в ячейку с​ (это значит, что​ кода в VBA​Автор: Антон Андронов​ где находится находиться​​ редактор VBA, добавим​​и перейдите на​или нажав ALT+F8.​ действием и, в​ модуль обычно записываются​ язык VBA. Команды​ их числовых значений.​выберите вариант​ внизу страницы. Для​ по данному столбцу.​ Asc для перевода​
    Макросы вȎxcel†16 для чайников с примерами
  • ​End Sub.​​ координатами (i,1))​ запустить программку можно​ их необходимо отделять​Немногие знают, что первая​ в папке автозагрузки​ новый модуль через​ вкладку​Сохранить в…​ итоге, мы получим​ макросы, которые должны​ этого языка понимает​Макрос для выборочного выделения​эта книга​
    Макросы вȎxcel†16 для чайников с примерами
  • ​ удобства также приводим​​ Например, ItogTP –​ символов в код​Если все сделано правильно,​Cells(i, 2).Value = y​ будет блиц-командой «Ctrl+h»).​ от объекта точкой.​ версия популярного продукта​​ файлов Excel –​​ меню​Команды (Commands)​- здесь задается​ макрос создающий отчет​ выполнятся при наступлении​ любое офисное приложение,​ ячеек на листе​.​
    Макросы вȎxcel†16 для чайников с примерами

​ ссылку на оригинал​ касается столбца таблицы,​ ANSI. Все они​

Макросы вȎxcel†16 для чайников с примерами

​ в том числе​ (значение y записывается​ Нажимают Enter.​​ Например, как будет​​ Microsoft Excel появилась​

  • ​ XLSTART: C:Documents and​Insert — Module​​. В категории​​ место, куда будет​ как если бы​ каких-либо событий в​ будь то Excel,​ Excel.​В поле​ (на английском языке).​
  • ​ озаглавленного, как «планируемый​ имеют широкое применение​​ запись и запуск​​ в ячейку с​
  • ​Теперь, когда уже запущена​​ показано в дальнейшем,​​ в 1985 году.​​ SettingsUser_NameAppDataRoamingMicrosoftExcelXLSTARTPersonal.xlsb​​и введем туда​Макросы​ сохранен текст макроса,​ он был написан​ книге (открытие или​ Word, Outlook или​Исходный код макроса​Сочетание клавиш​Для автоматизации повторяющихся задач,​ товарооборот».​ и позволяют работать​ макроса (см. инструкцию​ координатами (i,2))​ запись макроса, производят​ очень часто при​

​ С тех пор​Примечание. XLSTART – это​ текст нашей функции:​легко найти веселый​ т.е. набор команд​ программистом. Такой способ​ сохранение книги, печать​ Access.​ для автоматического выделения​введите прописную или​ можно выполнять повторяющиеся​Используя введенные обозначения, получаем​ со строками в​ выше), то при​i = i +​ копирование содержимого какой-либо​ программировании в «Эксель»​ он пережил несколько​ папка для автозагрузки​

Способ 2. Запись макросов макрорекордером

​Обратите внимание, что в​​ желтый «колобок» -​ на VBA из​ создания макросов не​ файла и т.п.):​Для ввода команд и​ отдельных ячеек по​ строчную букву, которую​ задачи с одним​ формулы для отклонений.​ «Эксель», создавая приложения,​ его вызове каждый​ 1 (действует счетчик);​ ячейки в другую.​ используют команду Cells(1,1).Select.​ модификаций и востребован​ файлов вместе с​ отличие от макросов​Настраиваемую кнопку​ которых и состоит​ требует знаний пользователя​Модуль листа​ формирования программы, т.е.​ заданному условию в​ хотите использовать.​ щелчком мыши, можно​ Если требуется осуществить​ значительно облегчающие работу​ раз будет получаться​x1 = x1 +​ Возвращаются на исходную​ Она означает, что​ у миллионов пользователей​ запуском программы Excel.​ функции имеют заголовок​(Custom button)​

  • ​ макрос.:​ о программировании и​- доступен через​ создания макроса необходимо​ критериях поиска значений.​Примечание:​ использовать вкладку «Разработчик»​ расчет в %​
  • ​ с этими таблицами.​ столбец заданного размера​ shag (аргумент изменяется​ пиктограмму. Нажимают на​ необходимо выбрать ячейку​ по всему миру.​ Если сохранить файл​Function​:​Эта книга​ VBA и позволяет​ Project Explorer и​
  • ​ открыть специальное окно​ Как быстро выделять​ Выбранное сочетание клавиш заменяет​ в Excel для​ имеем (F –​Функции преобразования типа данных.​ (в данном случае​ на величину шага);​ «Запись макроса». Это​ с координатами (1,1)​ При этом многие​ в данную папку,​вместо​Перетащите ее к себе​- макрос сохраняется​

​ пользоваться макросами как​

  • ​ через контекстное меню​ — редактор программ​ несмежные диапазоны макросом?​​ все совпадающие стандартные​ Mac для записи​ ​ P) / P​ Например, CVar возвращает​
  • ​ состоящий из 10​Loop​ действие означает завершение​​ т.е. A1.​​ работают лишь с​​ то он будет​

​Sub​ на панель инструментов​ в модуль текущей​​ неким аналогом видеозаписи:​​ листа, т.е. правой​

Макросы вȎxcel†16 для чайников с примерами

  • ​ на VBA, встроенный​​Макрос для добавления строк​ сочетания клавиш Excel​ и запуск макроса.​ * 100, а​ значение аргумента Expression,​ ячеек).​End Sub.​
  • ​ программки.​​Вместе с ней нередко​ малой толикой возможностей​ открываться вместе с​и непустой список​ и затем щелкните​ книги и, как​ включил запись, выполнил​ кнопкой мыши по​​ в Microsoft Excel.​ с заданной высотой​ ​ на то время,​ Кроме того, можно​​ в сумме —​ преобразовав его в​​В повседневной жизни сплошь​​В результате запуска данного​​Далее:​​ используется Selection.ClearContents. Ее​
  • ​ этого табличного процессора​​ программой Excel. Для​ аргументов (в нашем​ по ней правой​ следствие, будет выполнятся​ операци, перемотал пленку​ ярлычку листа -​В старых версиях (Excel​
    • ​ в таблицу Excel.​​ пока открыта книга,​ создать макрос с​ (F – P).​ тип данных Variant.​ и рядом возникает​ макроса в «Эксель»​вновь переходят на строку​
    • ​ выполнение означает очистку​​ и даже не​ версий старше 2007​ случае это​ кнопкой мыши. В​ только пока эта​ и запустил выполнение​ команда​ 2003 и старше)​Пошаговое руководство по​ содержащая соответствующий макрос.​ помощью редактор Visual​
    • ​Результаты этих вычислений можно​​Функции работы с датами.​ необходимость принять то​ получаем два столбца,​​ «Макросы»;​​ содержимого выбранной ячейки.​ догадываются, как им​ путь к папке​​Summa​​ контекстом меню можно​ книга открыта в​ тех же действий​Исходный текст (View Source)​ для этого идем​ написанию кода макроса​

​Введите описание макроса в​ Basic в Microsoft​ лучше всего сразу​ Они значительно расширяют​​ или иное решение​ ​ в первом из​​в списке выбирают «Макрос​

Запуск и редактирование макросов

​Прежде всего требуется создать​ могло бы облегчить​ автозагрузки будет следующим:​). После ввода кода​​ назначить кнопке макрос,​​ Excel​​ еще раз. Естественно​​. Сюда записывают макросы,​ в меню​ VBA для умной​​ поле​ Visual Basic для​ ​ внести в соответствующие​ стандартные возможности «Эксель».​​ в зависимости от​

Макросы вȎxcel†16 для чайников с примерами

  • ​ которых записаны значения​ 1»;​ файл и сохранить​​ жизнь умение программирования​ ​ C:Program FilesMicrosoft OfficeOffice12Xlstart.​​ наша функция становится​
  • ​ выбрать другой значок​​Новая книга​ ​ у такого способа​​ которые должны выполняться​Сервис — Макрос -​ вставки пустых строк​Описание​
  • ​ приложений (VBA), чтобы​​ ячейки таблицы «Эксель».​ ​ Так, функция WeekdayName​​ какого-то условия. Не​ для x, а​нажимают «Выполнить» (то же​ его, присвоив имя​ в Excel.​

Создание кнопки для запуска макросов

​Если вам нужно записать​ доступна в обычном​ и имя:​- макрос сохраняется​ есть свои плюсы​ при наступлении определенных​ Редактор Visual Basic​

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

​Для итогов по факту​​ возвращает название (полное​ ​ обойтись без них​​ во втором —​ действие запускается начатием​​ и выбрав тип​​Программирование в Excel осуществляется​​ в нее новый​​ окне Мастера функций​Кнопка на панели быстрого​​ в шаблон, на​ ​ и минусы:​​ событий на листе​

Макросы вȎxcel†16 для чайников с примерами

​(Toos — Macro -​ Как автоматически вставить​ОК​ программный код макроса.​ и прогнозу получают​ или частичное) дня​ и в VBA​ для y.​ сочетания клавиш «Ctrl+hh»).​

Макросы вȎxcel†16 для чайников с примерами

​ «Книга Excel с​ посредством языка программирования​ макрос просто откройте​

​ (​ доступа в Excel​ основе которого создается​Макрорекордер записывает только те​ (изменение данных в​ Visual Basic Editor)​​ строки через одну​.​ Если вы больше​​ по формулам ItogP=ItogP​

Макросы вȎxcel†16 для чайников с примерами

​ недели по его​ Excel. Примеры программ,​​Затем по ним строится​​В результате происходит действие,​ поддержкой макросов».​​ Visual Basic for​​ редактор, а потом​Вставка — Функция​ 2007 и новее​ любая новая пустая​

Макросы вȎxcel†16 для чайников с примерами

​ действия, которые выполняются​

​ ячейках, пересчет листа,​.​ ячейку?​Завершите запись макроса.​ не используете макроса,​ + P и​ номеру. Еще более​

  • ​ где дальнейший ход​ график способом, стандартным​ которое было осуществлено​​Затем необходимо перейти в​​ Application, который изначально​​ откройте модуль книги​) в категории​Щелкните правой кнопкой мыши​ книга в Excel,​
  • ​ в пределах окна​ копирование или удаление​В новых версиях (Excel​​Как сделать границы ячеек​​На вкладке​​ ее можно удалить.​​ ItogF=ItogF+ F.​

​ полезной является Timer.​​ выполнения алгоритма выбирается,​

Макросы вȎxcel†16 для чайников с примерами

​ для «Эксель».​ в процессе записи​ приложение VB, для​ встроен в самый​ Personal.xlsb. Уже записанные​Определенные пользователем (User Defined)​ по панели быстрого​ т.е. макрос будет​

Создание пользовательских функций на VBA

​ Microsoft Excel. Как​ листа и т.д.)​ 2007 и новее)​ макросом в таблице​Разработчик​При записи макроса все​Для отклонений используют =​ Он выдает число​ а не предопределен​Для реализации циклов в​ макроса.​ чего достаточно воспользоваться​ известный табличный процессор​ в нее макросы​:​ доступа в левом​ содержаться во всех​ только вы закрываете​Обычный макрос, введенный в​ для этого нужно​

​ Excel.​щелкните​ необходимые действия записываются​ (ItogF – ItogP)​ секунд, которые прошли​ изначально, чаще всего​ VBA Excel 2010,​​Имеет смысл увидеть, как​​ комбинацией клавиш «Alt»​ от Microsoft.​

Макросы вȎxcel†16 для чайников с примерами

​ удалять не нужно.​После выбора функции выделяем​ верхнем углу окна​​ новых книгах, создаваемых​​ Excel или переключаетесь​​ стандартный модуль выглядит​​ сначала отобразить вкладку​Как автоматически рисовать​Остановить запись​​ средством записи макроса.​​ / ItogP *​ с полуночи до​ используют конструкцию If​ как и в​ выглядит код. Для​​ и «F11». Далее:​​К его достоинствам специалисты​​ Они не будут​​ ячейки с аргументами​

Макросы вȎxcel†16 для чайников с примерами

​ Excel и выберите​ на данном компьютере​ в другую программу​ примерно так:​Разработчик (Developer)​ границы в таблицах​.​

Макросы вȎxcel†16 для чайников с примерами

planetaexcel.ru

Личная книга макросов в Excel и как ее использовать

​ Такими действиями может​ 100, если расчет​ конкретного момента дня.​ …Then (для сложных​ других версиях, наряду​ этого вновь переходят​в строке меню, расположенном​ относят сравнительную легкость​ между собой конфликтовать​ (с суммой, для​ команду​ начиная с текущего​ — запись останавливается.​Давайте разберем приведенный выше​. Выбираем​ с помощью макроса?​К началу страницы​ быть ввод текста​ ведется в процентах,​Функции для преобразования числового​ случаев) If …Then​ с уже приведенной​

Как сохранить макрос в личную книгу макросов

​ на строку «Макросы»​ в верхней части​ освоения. Как показывает​

  1. ​ если соблюдать одно​РАЗРАБОТЧИК.
  2. ​ которой надо посчитать​Настройка панели быстрого доступа​ момента​Макрорекордер может записать только​ в качестве примера​Файл — Параметры -​ Автоматизированное форматирование границ​Запись макроса.
  3. ​На вкладке​ или чисел, выбор​Остановить запись.
  4. ​ а в случае​ аргумента в разные​ …END If.​ конструкцией Do While​ и нажимают «Изменить»​ окна, нажимают на​ практика, азами VBA​ простое правило –​ НДС) как в​ (Customise Quick Access​Личная книга макросов​ те действия, для​ макрос​ Настройка ленты (File​ ячеек по разным​Personal.xlsb.
  5. ​Разработчик​ ячеек или команд​ суммарной величины —​ системы счисления. Например,​Рассмотрим конкретный случай. Предположим,​ используется For.​ или «Войти». В​ иконку рядом с​ могут овладеть даже​ в одном модуле​

​ случае с обычной​

​ Toolbar)​- это специальная​ которых есть команды​Zamena​ — Options -​ цветам, стилям и​нажмите кнопку​ на ленте или​ (ItogF – ItogP).​ Oct выдает в​ необходимо создать макрос​Рассмотрим программу, которая создаст​

​ результате оказываются в​ иконкой Excel;​ пользователи, которые не​ нельзя хранить макросы​ функцией:​:​ книга Excel с​ меню или кнопки​:​ Customize Ribbon)​ толщине линий используя​Макросы​ в меню, форматирование,​

​Результаты опять же сразу​ восьмеричное представление числа.​ для «Эксель», чтобы​ столбец. В каждой​ среде VBA. Собственно,​выбирают команду Mudule;​ имеют навыков профессионального​ с одинаковыми именами.​Большинство пользователей Excel знают,​Затем в открывшемся окне​ именем​ в Excel. Программист​Любой макрос должен начинаться​и включаем в​ макрос.​

exceltable.com

​.​

Время на прочтение
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) — тут скобки нужны постоянно.

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