VBA Excel: примеры программ. Макросы в Excel. Создание макросов в программе Microsoft Excel

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

Макрос можно записать двумя способами:

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

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

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

Автоматическая запись макросов

Прежде, чем начать автоматическую запись макросов, нужно .

Открывается окно настройки записи макроса. Тут можно указать любое имя макроса, если установленное по умолчанию вас не устраивает. Главное, чтобы имя это начиналось с буквы, а не с цифры. Также, в названии не должно быть пробелов. Мы оставили название по умолчанию – «Макрос1».

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

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

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

Когда все настройки выполнены, жмем на кнопку «OK».

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

Для примера, запишем простейшее арифметическое действие: сложение содержимого трёх ячеек (=C4+C5+C6).

После этого, жмем на кнопку «Остановить запись». Эта кнопка преобразовалась из кнопки «Запись макроса», после включения записи.

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

Для того, чтобы проверить, как работает записанный макрос, кликаем в том же блоке инструментов «Код» по кнопке «Макросы», или жмем сочетание клавиш Alt+F8.

После этого, открывается окно со списком записанных макросов. Ищем макрос, который мы записали, выделяем его, и жмем на кнопку «Выполнить».

Можно поступить ещё проще, и не вызывать даже окно выбора макросов. Мы же помним, что записали сочетание «горячих клавиш» для быстрого вызова макроса. В нашем случае, это Ctrl+М. Набираем данную комбинацию на клавиатуре, после чего макрос запускается.

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

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

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

Открывается Microsoft Visual Basic (VBE) – среда, где происходит редактирование макросов.

Запись каждого макроса начинается с команды Sub, а заканчивается командой End Sub. Сразу же после команды Sub указывается имя макроса. Оператор «Range(«…»).Select» указывает выбор ячейки. Например, при команде «Range(«C4»).Select» выбирается ячейка C4. Оператор «ActiveCell.FormulaR1C1» используется для записи действий в формулах, и для других расчетов.

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

Range(«C3»).Select
ActiveCell.FormulaR1C1 = «11»

Выражение «ActiveCell.FormulaR1C1 = «=R[-3]C+R[-2]C+R[-1]C»» заменим на «ActiveCell.FormulaR1C1 = «= R[-4]C+R[-3]C+R[-2]C+R[-1]C»».

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

В случае, если макрос слишком большой, его выполнение может занять значительное время. Но, путем внесения ручного изменения в код, мы можем ускорить процесс. Добавляем команду «Application.ScreenUpdating = False». Она позволит сохранить вычислительные мощности, а значит ускорить работу. Это достигается путем отказа от обновления экрана во время выполнения вычислительных действий. Чтобы возобновить обновление после выполнения макроса, в его конце пишем команду «Application.ScreenUpdating = True»

Добавим также команду «Application.Calculation = xlCalculationManual» вначале кода, а в конце кода дописываем «Application.Calculation = xlCalculationAutomatic». Этим мы вначале макроса отключаем автоматический пересчет результата после каждого изменения ячеек, а в конце макроса – включаем. Таким образом, Excel подсчитает результат только один раз, а не будет его постоянно пересчитывать, чем сэкономит время.

Написание кода макроса с нуля

Продвинутые пользователи могут выполнять не только редактирование и оптимизацию записанных макросов, но и записывать код макросов с нуля. Для того, чтобы приступить к этому, нужно нажать на кнопку «Visual Basic», которая расположена в самом начале ленты разработчика.

После этого, открывается знакомое нам окно редактора VBE.

Программист пишет там код макроса вручную.

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

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

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

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

Макрос в Microsoft Office (да, этот функционал работает одинаково во многих приложениях пакета Microsoft Office) – это программный код на языке программирования (VBA), сохранённый внутри документа. Чтобы было понятнее, документ Microsoft Office можно сравнить со страницей HTML, тогда макрос – это аналог Javascript. То, что Javascript умеет делать с данными в формате HTML, находящимися на web-странице, очень похоже на то, что макрос может делать с данными в документе Microsoft Office.

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

  • Применять стили и форматирование.
  • Выполнять различные операции с числовыми и текстовыми данными.
  • Использовать внешние источники данных (файлы баз данных, текстовые документы и т.д.)
  • Создавать новый документ.
  • Проделывать все вышеперечисленные действия в любой их комбинации.

Создание макроса – практический пример

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

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

Чтобы создать макрос, откройте View (Вид) > Macros (Макросы) > Record Macro (Запись макроса…)

Дайте своему макросу имя (без пробелов) и нажмите ОК .

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

Excel сигнализирует о том, что включен режим записи макроса в двух местах. Во-первых, в меню Macros (Макросы) – вместо строки Record Macro (Запись макроса…) появилась строка Stop Recording (Остановить запись).

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

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

  • =SUM(B2:K2) или =СУММ(B2:K2)
  • =AVERAGE(B2:K2) или =СРЗНАЧ(B2:K2)
  • =MIN(B2:K2) или =МИН(B2:K2)
  • =MAX(B2:K2) или =МАКС(B2:K2)
  • =MEDIAN(B2:K2) или =МЕДИАНА(B2:K2)

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

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

Соответственно:

  • =SUM(L2:L21) или =СУММ(L2:L21)
  • =AVERAGE(B2:K21) или =СРЗНАЧ(B2:K21) – для расчёта этого значения необходимо взять именно исходные данные таблицы. Если взять среднее значение из средних по отдельным строкам, то результат будет другим.
  • =MIN(N2:N21) или =МИН(N2:N21)
  • =MAX(O2:O21) или =МАКС(O2:O21)
  • =MEDIAN(B2:K21) или =МЕДИАНА(B2:K21) – считаем, используя исходные данные таблицы, по причине указанной выше.

Теперь, когда с вычислениями закончили, займёмся форматированием. Для начала для всех ячеек зададим одинаковый формат отображения данных. Выделите все ячейки на листе, для этого воспользуйтесь комбинацией клавиш Ctrl+A , либо щелкните по иконке Выделить все , которая находится на пересечении заголовков строк и столбцов. Затем нажмите Comma Style (Формат с разделителями) на вкладке Home (Главная).

  • Жирное начертание шрифта.
  • Выравнивание по центру.
  • Заливка цветом.

И, наконец, настроим формат итоговых значений.

Вот так это должно выглядеть в итоге:

Если Вас все устраивает, остановите запись макроса.

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

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

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

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

Важный момент! Если Вы сохраните файл с расширением XLTX , то макрос в нём работать не будет. Кстати, можно сохранить книгу как шаблон Excel 97-2003, который имеет формат XLT , он тоже поддерживает макросы.

Когда шаблон сохранён, можно спокойно закрыть Excel.

Выполнение макроса в Excel

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

  • Макрос может нанести вред.
  • Ещё раз прочти предыдущий пункт.

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

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

Следующим шагом, мы импортируем последний обновлённый набор данных из файла CSV (на основе такого файла мы создавали наш макрос).

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

Когда импорт будет закончен, зайдите в меню Macros (Макросы) на вкладке View (Вид) и выберите команду View Macros (Макросы).

В открывшемся диалоговом окне мы увидим строку с именем нашего макроса FormatData . Выберите его и нажмите Run (Выполнить).

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

Заглянем под капот: Как работает макрос?

Как уже не раз упоминалось, макрос – это программный код на языке программирования Visual Basic for Applications (VBA). Когда Вы включаете режим записи макроса, Excel фактически записывает каждое сделанное Вами действие в виде инструкций на языке VBA. По-простому, Excel пишет программный код вместо Вас.

Чтобы увидеть этот программный код, нужно в меню Macros (Макросы) на вкладке View (Вид) кликнуть View Macros (Макросы) и в открывшемся диалоговом окне нажать Edit (Изменить).

Откроется окно Visual Basic for Applications , в котором мы увидим программный код записанного нами макроса. Да, Вы правильно поняли, здесь этот код можно изменить и даже создать новый макрос. Те действия, которые мы совершали с таблицей в этом уроке, вполне можно записать с помощью автоматической записи макроса в Excel. Но более сложные макросы, с тонко настроенной последовательностью и логикой действий требуют программирования вручную.

Добавим ещё один шаг к нашей задаче…

Представьте, что наш исходный файл с данными data.csv создаётся автоматически каким-то процессом и сохраняется на диске всегда в одном и том же месте. Например, C:\Data\data.csv – путь к файлу с обновляемыми данными. Процесс открытия этого файла и импорта данных из него тоже можно записать в макрос:

  1. Откройте файл шаблона, в котором мы сохранили макрос – FormatData .
  2. Создайте новый макрос с именем LoadData .
  3. В процессе записи макроса LoadData сделайте импорт данных из файла data.csv – как мы это делали в предыдущей части урока.
  4. Когда импорт будет завершён, остановите запись макроса.
  5. Удалите все данные из ячеек.
  6. Сохраните файл, как шаблон Excel с поддержкой макросов (расширение XLTM).

Таким образом, запустив этот шаблон, Вы получаете доступ к двум макросам – один загружает данные, другой их форматирует.

Если есть желание заняться программированием, Вы можете объединить действия этих двух макросов в один – просто скопировав код из LoadData в начало кода FormatData .

Следующие простые примеры макросов Excel иллюстрируют некоторые возможности и приёмы, описанные в самоучителе по Excel VBA .

Макрос Excel: пример 1

Первоначально эта процедура Sub была приведена, как пример использования комментариев в коде VBA. Однако, здесь также можно увидеть, как объявляются переменные, как работают ссылки на ячейки Excel, использование цикла For , условного оператора If и вывод на экран окна сообщения.

"Процедура Sub выполняет поиск ячейки, содержащей заданную строку "в диапазоне ячеек A1:A100 активного листа Sub Find_String(sFindText As String) Dim i As Integer "Целое число типа Integer, используется в цикле For Dim iRowNumber As Integer "Целое число типа Integer для хранения результата iRowNumber = 0 "Просматривает одну за другой ячейки A1:A100 до тех пор, пока не будет найдена строка sFindText For i = 1 To 100 If Cells(i, 1).Value = sFindText Then "Если совпадение с заданной строкой найдено "сохраняем номер текущей строки и выходим из цикла For iRowNumber = i Exit For End If Next i "Сообщаем пользователю во всплывающем окне найдена ли искомая строка "Если заданная строка найдена, указываем в какой ячейке найдено совпадение If iRowNumber = 0 Then MsgBox "Строка " & sFindText & " не найдена" Else MsgBox "Строка " & sFindText & " найдена в ячейке A" & iRowNumber End If End Sub

Макрос Excel: пример 2

Следующая процедура Sub – пример использования цикла Do While . Здесь также можно увидеть, как объявляются переменные, работу со ссылками на ячейки Excel и применение условного оператора If .

"Процедура Sub выводит числа Фибоначчи, не превышающие 1000 Sub Fibonacci() Dim i As Integer "Счётчик для обозначения позиции элемента в последовательности Dim iFib As Integer "Хранит текущее значение последовательности Dim iFib_Next As Integer "Хранит следующее значение последовательности Dim iStep As Integer "Хранит размер следующего приращения "Инициализируем переменные i и iFib_Next i = 1 iFib_Next = 0 "Цикл Do While будет выполняться до тех пор, пока значение "текущего числа Фибоначчи не превысит 1000 Do While iFib_Next < 1000 If i = 1 Then "Особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "Сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "Выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "Вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Макрос Excel: пример 3

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

"Процедура Sub сохраняет значения ячеек столбца A активного листа в массиве Sub GetCellValues() Dim iRow As Integer "Хранит номер текущей строки Dim dCellValues() As Double "Массив для хранения значений ячеек iRow = 1 ReDim dCellValues(1 To 10) "Цикл Do Until перебирает последовательно ячейки столбца A активного листа "и извлекает их значения в массив до тех пор, пока не встретится пустая ячейка Do Until IsEmpty(Cells(iRow, 1)) "Проверяем, что массив dCellValues имеет достаточный размер "Если нет – увеличиваем размер массива на 10 при помощи ReDim If UBound(dCellValues) < iRow Then ReDim Preserve dCellValues(1 To iRow + 9) End If "Сохраняем значение текущей ячейки в массиве dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop End Sub

Макрос Excel: пример 4

В этом примере процедура Sub считывает значения из столбца A рабочего листа Лист2 и выполняет с ними арифметические операции. Результаты заносятся в ячейки столбца A на активном рабочем листе. В этом макросе продемонстрировано использование объектов Excel. В частности, производится обращение процедурой Sub к объекту Columns , и показано, как доступ к этому объекту осуществляется через объект Worksheet . Показано так же, что при обращении к ячейке или диапазону ячеек на активном листе, имя этого листа при записи ссылки указывать не обязательно.

"Процедура Sub при помощи цикла считывает значения в столбце A рабочего листа Лист2, "выполняет с каждым значением арифметические операции и записывает результат в "столбец A активного рабочего листа (Лист1) Sub Transfer_ColA() Dim i As Integer Dim Col As Range Dim dVal As Double "Присваиваем переменной Col столбец A рабочего листа Лист 2 Set Col = Sheets("Лист2").Columns("A") i = 1 "При помощи цикла считываем значения ячеек столбца Col до тех пор, "пока не встретится пустая ячейка Do Until IsEmpty(Col.Cells(i)) "Выполняем арифметические операции над значением текущей ячейки dVal = Col.Cells(i).Value * 3 - 1 "Следующая команда записывает полученный результат в столбец A активного рабочего листа "Имя листа в ссылке указывать нет необходимости, так как это активный лист. Cells(i, 1) = dVal i = i + 1 Loop End Sub

Макрос Excel: пример 5

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

"Данный код показывает окно с сообщением, если на текущем рабочем листе "выбрана ячейка B1 Private Sub Worksheet_SelectionChange(ByVal Target As Range) "Проверяем выбрана ли ячейка B1 If Target.Count = 1 And Target.Row = 1 And Target.Column = 2 Then "Если ячейка B1 выбрана, выполняем необходимое действие MsgBox "Вы выбрали ячейку B1" End If End Sub

Макрос Excel: пример 6

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

"Процедура Sub присваивает аргументам Val1 и Val2 значения ячеек A1 и B1 "из рабочей книги Data.xlsx, находящейся в папке C:\Documents and Settings Sub Set_Values(Val1 As Double, Val2 As Double) Dim DataWorkbook As Workbook On Error GoTo ErrorHandling "Открываем рабочую книгу с данными Set DataWorkbook = Workbooks.Open("C:\Documents and Settings\Data") "Присваиваем переменным Val1 и Val2 значения из заданной рабочей книги Val1 = Sheets("Лист1").Cells(1, 1) Val2 = Sheets("Лист1").Cells(1, 2) DataWorkbook.Close Exit Sub ErrorHandling: "Если файл не найден, пользователю будет предложено поместить искомый файл "в нужную папку и после этого продолжить выполнение макроса MsgBox "Файл Data.xlsx не найден! " & _ "Пожалуйста добавьте рабочую книгу в папку C:\Documents and Settings и нажмите OK" Resume End Sub

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

Рассмотрим два примера:

1. Ищем и используем команду

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

Sub Вставка1() Dim q As Object On Error Resume Next Set q = Cells For Each q In Selection q = 1 Next q End Sub

Выделяем данный код (без нумерации строк, начиная со слова Sub ) и нажимаем Ctrl+C . Переходим в свою рабочую книгу MS Excel и нажимаем сочетание клавиш Alt+F11 , у вас откроется окно редактора VBA:

В левом окне "Project - VBA Project" выбираем (щелкаем мышкой) нашу рабочую книгу, в которую необходимо вставить макрос, например, "VBAProject (Книга2)":

В пункте меню "Insert" выбираем "Module":

В левом окне "Project - VBA Project" у вас должна появиться новая папка "Modules" и в ней новый объект "Module1":

Переходим курсором в правое "Большое" поле для ввода и нажимаем Ctrl+V , скопированный макрос вставиться в модуль:

Макросы в MS Excel можно вставлять в следующие места:

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

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

Чтобы вставить код в Рабочий лист, в левом окне редактора VBA выберите соответствующий лист, щелкните по нему два раза левой кнопкой мышки, переместите курсор в правое поле ввода и вставьте код.

Для вставки кода в Книгу, выберите "ЭтаКнига":


Давайте потренируемся. Вставьте код опубликованный ниже в "Лист1".

Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo a If Target = 2 Then VBA.MsgBox ("Ячейка " & Target.Address & " = 2") End If a: Exit Sub End Sub

Данный макрос выводит информационное сообщение если вы введете в любую ячейку листа "2".

Вернитесь в рабочую книгу, перейдите в "Лист1" и введите в ячейку "А1" цифру "2" и нажмите Enter , после чего у вас должно появиться следующее сообщение:

Если вы видите это сообщение, то вы все сделали правильно. Если нет, то вы вставили код куда-то не туда, повторите попытку.

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

2. Ищем и используем функцию

Находим в интернете VBA код функции, которая подсчитывает, например, количество слов в ячейке:

Public Function КолСловВЯчейке(Ячейка As Range) Dim q As Variant Application.Volatile q = VBA.Split(Application.WorksheetFunction.Trim(Ячейка.Value), " ") КолСловВЯчейке = UBound(q) + 1 End Function

Копируем код, нажимаем сочетание клавиш Alt+F11 , откроется редактор VBA:


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


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

В открывшемся окне "Вставка функции" в поле "Категория" выбираем "Определенные пользователем"

В списке доступных функций выбираем "КолСловВЯчейке", нажимаем "ОК":

Вводим необходимые аргументы и нажимаем "ОК":

Получаем результат:

Важно:

Если вы не сохраните книгу, в которую вставили макрос как "Книгу с поддержкой макросов", все модули с макросами удаляться и вам придется, потом, повторно проделывать всю эту работу.

Если при вставке макроса в модуль у вас вместо некоторого текста стоят красные знаки "???????? "

Это значит, что у вас проблема с кодировкой, которая наблюдается с копированием Кириллического текста из некоторых браузеров. Чтобы победить эту проблему, попробуйте вставить скопированный код в пустой лист MS Excel, как "Текст в кодировке Unicode". Для этого перейдите в книгу MS Excel, выберите или создайте пустой лист, встаньте в ячейку "A1" и нажмите сочетания клавишCtrl+Alt+V . Должно будет появиться меню "Специальной вставки", выберите пункт "Текст в кодировке Unicode" и нажмите "OK".

Код должен будет вставиться в рабочий лист без знаков вопроса:

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

Если вы не видите в редакторе VBA окна "Project - VBA Project", перейдите во вкладку меню "View" и в списке выберите пункт "Project Explorer" или нажмите сочетание клавиш Ctrl+R :

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

Что представляют собой Excel-макросы?

Макросы используются не только в таблицах, но и во всем Microsoft Office. Они представляют собой созданный при помощи Visual Basic for Applications код. Если вы частично знакомы с web-программированием, то можно провести аналогию с Javascript. Excel-макросы делают примерно то же самое, что и Javascript с данными формата HTML.

Небольшая часть того, что может сделать макрос в офисных приложениях:

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

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

Чем могут быть опасны макросы в Excel?

Повредить файлы на ПК;
. похитить конфиденциальные данные.

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

Еще один способ работы вредоносного макроса - посредничество для внедрения угроз в систему. В этом случае он является своеобразными воротами для внедрения и генерирования троянского ПО. Им уже будет управлять не видоизменённый макрос, а сама операционная система, а следовательно, угроза становится более масштабной. Не всегда получается вылечить такие вирусы, иногда приходится полностью менять Windows OC или жесткий диск ПК (в зависимости от задач, которые ставил хакер при написании кода).

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

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

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

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

Создание начинается с меню «Вид». В нем нужно выбрать позицию «Макросы» и команду «Записать Макрос». Далее нужно задать имя без пробелов, например, «Format» (если код будет отвечать за изменение формата текста или ячеек).

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

Как включить макросы в Excel

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

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

Как увидеть программный код макроса?

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

Для этого нужно последовательно выполнить команды:

Развернуть вкладку «Вид»;
. открыть «Макросы»;
. выбрать имя необходимого макроса;
. вызывать окно с его кодом при помощи кнопки «Изменить».

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

Как начать работу макроса по клику на ячейку

Допустим, вы хотите, чтобы при выделении ячейки А1 запускалась работа макроса. Чтобы выбранная в Excel ячейка макрос запускала, необходимо в первый модуль добавить программный код:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then: Call module1
End Sub

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

Где можно научиться работать с макросами

Есть несколько способов научиться созданию более сложных макросов. Они должны отличаться логикой и четко настроенной последовательностью действий. Создаются такие макросы только путем написания кода VBA вручную. Для создания сложных макросов вам потребуется затратить некоторое время на изучения тонкостей языка программирования Visual Basik.

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

Примеры

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

Sub Макрос1()

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то