Пример написания макросов excel

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

  • 23 май 2022

  • 0

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

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

Ксеня Шестак

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Table of Contents

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

В Excel нажмите комбинацию клавиш alt + F11. Это приведет вас к редактору VBA в MS Excel. Затем щелкните правой кнопкой мыши папку Microsoft Excel Objects слева и выберите Insert => Module. Это место, где сохраняются макросы. Чтобы использовать макрос, вам нужно сохранить документ Excel как макрос. Из табуляции File => Save as, выберите Save as macro-enabled Workbok (расширение .xlsm) Теперь пришло время написать свой первый макрос!

1. Копирование данных из одного файла в другой.

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

Sub CopyFiletoAnotherWorkbook()
    
        Sheets("Example 1").Range("B4:C15").Copy
    
        Workbooks.Add
    
        ActiveSheet.Paste
    
        Application.DisplayAlerts = False
    
        ActiveWorkbook.SaveAs Filename:="C:TempMyNewBook.xlsx"
    
        Application.DisplayAlerts = True
End Sub

2. Отображение скрытых строк

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

Sub ShowHiddenRows()
    Columns.EntireColumn.Hidden = False
    Rows.EntireRow.Hidden = False
End Sub

3. Удаление пустых строк и столбов

Пустые строки в Excel — может быть проблемой для обработки данных. Вот как избавиться от них:

Sub DeleteEmptyRowsAndColumns()
    
        Dim MyRange As Range
        Dim iCounter As Long
    
        Set MyRange = ActiveSheet.UsedRange
        
        For iCounter = MyRange.Rows.Count To 1 Step -1
    
           If Application.CountA(Rows(iCounter).EntireRow) = 0 Then
               Rows(iCounter).Delete
               
               
           End If
    
        Next iCounter
    
        For iCounter = MyRange.Columns.Count To 1 Step -1
    
               If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then
                Columns(iCounter).Delete
               End If
    
        Next iCounter      
End Sub

4. Нахождение пустых ячеек

Sub FindEmptyCell()
    ActiveCell.Offset(1, 0).Select
       Do While Not IsEmpty(ActiveCell)
          ActiveCell.Offset(1, 0).Select
       Loop
End Sub

#### 5. Заполнение пустых ячеек

Как упоминалось ранее, пустые ячейки препятствуют обработке данных и созданию сводных таблиц. Вот один примерный код, который заменяет все пустые ячейки на 0. Этот макрос имеет очень большое приложение, потому что Вы можете использовать его для поиска и замены результатов N/A, а также других символов, таких как точки, запятые или повторяющиеся значения:

Sub FindAndReplace()
    
        Dim MyRange As Range
        Dim MyCell As Range
    
        Select Case MsgBox("Can't Undo this action.  " & _
                            "Save Workbook First?", vbYesNoCancel)
            Case Is = vbYes
            ThisWorkbook.Save
            Case Is = vbCancel
            Exit Sub
        End Select
    
        Set MyRange = Selection
    
        For Each MyCell In MyRange
    
            If Len(MyCell.Value) = 0 Then
                MyCell = 0
            End If
    
        Next MyCell
End Sub

#### 6. Сортировка данных

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

NB: Здесь нам нужно поставить этот код в Sheet1 (папка Microsoft Excel Objects), а не в Module1 (папка Modules):

Private Sub Worksheet_BeforeDoubleClick (ByVal Target as Range, Cancel As Boolean)
    
        Dim LastRow As Long
    
        LastRow = Cells (Rows.Count, 1) .End (xlUp) .Row
    
        Rows ("6:" & LastRow) .Sort _
        Key1: = Cells (6, ActiveCell.Column), _
        Order1: = xlAscending
End Sub

#### 7. Удаление пустых пространств

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

Sub TrimTheSpaces()
    
        Dim MyRange As Range
        Dim MyCell As Range
    
        Select Case MsgBox("Can't Undo this action.  " & _
                            "Save Workbook First?", vbYesNoCancel)
            Case Is = vbYes
            ThisWorkbook.Save
            Case Is = vbCancel
            Exit Sub
        End Select
    
        Set MyRange = Selection
    
        For Each MyCell In MyRange
    
            If Not IsEmpty(MyCell) Then
                MyCell = Trim(MyCell)
            End If
    
        Next MyCell
End Sub

#### 8. Выделение дубликатов цветом

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

Sub HighlightDuplicates()
    
        Dim MyRange As Range
        Dim MyCell As Range
    
        Set MyRange = Selection 
    
        For Each MyCell In MyRange 
    
            If WorksheetFunction.CountIf(MyRange, MyCell.Value) > 1 Then
                MyCell.Interior.ColorIndex = 36
            End If
    
        Next MyCell
End Sub

#### 9. Выделение десяти самых высоких чисел

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

Sub TopTen()
    Selection.FormatConditions.AddTop10
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1)
            .TopBottom = xlTop10Top
            
            .Rank = 10
            .Percent = False
        End With
        With Selection.FormatConditions(1).Font
            .Color = -16752384
            .TintAndShade = 0
        End With
        With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .Color = 13561798
            .TintAndShade = 0
        End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

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

#### 10. Выделение данных больших чем данные число

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

Sub HighlightGreaterThanValues()
    Dim i As Integer
    i = InputBox("Enter Greater Than Value", "Enter Value")
    Selection.FormatConditions.Delete
    
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:=i
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1)
            .Font.Color = RGB(0, 0, 0)
            .Interior.Color = RGB(31, 218, 154)
        End With
End Sub

Вы тоже можете настроить этот код, чтобы выделить более низкие чисел.

#### 11. Выделение ячеек комментариями
Простой макрос, который выделяет все ячейки, содержащие комментарии:

Sub HighlightCommentCells()
    Selection.SpecialCells(xlCellTypeComments).Select
    Selection.Style= "Note"
End Sub

#### 12. Выделение ячеек со словами с ошибками

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

 Sub ColorMispelledCells()
    For Each cl In ActiveSheet.UsedRange
        If Not Application.CheckSpelling(Word:=cl.Text) Then _
        cl.Interior.ColorIndex = 28
    Next cl
End Sub

13. Создание сводной таблицы

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

Sub PivotTableForExcel2007()
    Dim SourceRange As Range
    Set SourceRange = Sheets("Sheet1").Range("A3:N86")
    ActiveWorkbook.PivotCaches.Create( _
    SourceType:=xlDatabase, _
    SourceData:=SourceRange, _
    Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:="", _
    TableName:="", _
    DefaultVersion:=xlPivotTableVersion12
End Sub

14. Отправка активного файла по электронной почте

Мой любимый код VBA. Он позволяет вам прикреплять и отправлять файл, с которым вы работаете, с предопределенным адресом электронной почты, заголовком сообщения и телом сообщения! Сначала Вам нужно сделать референцию в Excel на Microsoft Outlook (в редакторе Excel VBA, нажмите tools => references и выберите Microsoft Outlook).

Sub SendFIleAsAttachment()
    
    
        Dim OLApp As Outlook.Application
        Dim OLMail As Object
    
        Set OLApp = New Outlook.Application
        Set OLMail = OLApp.CreateItem(0)
        OLApp.Session.Logon  
    
        With OLMail
        .To = "admin@datapigtechnologies.com; mike@datapigtechnologies.com"
        .CC = ""
        .BCC = ""
        .Subject = "This is the Subject line"
        .Body = "Hi there"
        .Attachments.Add ActiveWorkbook.FullName
        .Display  
        End With
    
        Set OLMail = Nothing
        Set OLApp = Nothing
End Sub

15. Вставка всех графиков Excel в презентацию PowerPoint

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

Sub SendExcelFiguresToPowerPoint()
    
    
        Dim PP As PowerPoint.Application
        Dim PPPres As PowerPoint.Presentation
        Dim PPSlide As PowerPoint.Slide
        Dim i As Integer
    
        Sheets("Slide Data").Select
            If ActiveSheet.ChartObjects.Count < 1 Then
                MsgBox "No charts existing the active sheet"
                Exit Sub
            End If
    
        Set PP = New PowerPoint.Application
        Set PPPres = PP.Presentations.Add
        PP.Visible = True
    
            For i = 1 To ActiveSheet.ChartObjects.Count
            
                ActiveSheet.ChartObjects(i).Chart.CopyPicture _
                Size:=xlScreen, Format:=xlPicture
                Application.Wait (Now + TimeValue("0:00:1"))
            
                ppSlideCount = PPPres.Slides.Count
                Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutBlank)
                PPSlide.Select
            
                PPSlide.Shapes.Paste.Select
                PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
                PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
            Next i
    
        Set PPSlide = Nothing
        Set PPPres = Nothing
        Set PP = Nothing
End Sub

16. Вставка таблицы Excel в MS Word

Таблицы Excel обычно помещаются внутри текстовых документов. Вот один автоматический способ экспорта таблицы Excel в MS Word:

 Sub ExcelTableInWord()
    
    
        Dim MyRange As Excel.Range
        Dim wd As Word.Application
        Dim wdDoc As Word.Document
        Dim WdRange As Word.Range
    
       Sheets("Revenue Table").Range("B4:F10").Cop
    
        Set wd = New Word.Application
        Set wdDoc = wd.Documents.Open _
        (ThisWorkbook.Path & "" & "PasteTable.docx")
        wd.Visible = True
    
        Set WdRange = wdDoc.Bookmarks("DataTableHere").Rangе
    
        On Error Resume Next
        WdRange.Tables(1).Delete
        WdRange.Paste 
    
        WdRange.Tables(1).Columns.SetWidth _
        (MyRange.Width / MyRange.Columns.Count), wdAdjustSameWidth
    
        wdDoc.Bookmarks.Add "DataTableHere", WdRange
    
        Set wd = Nothing
        Set wdDoc = Nothing
        Set WdRange = Nothing
End Sub

17. Извлечение слов из текста

Мы можем использовать формулы, если хотим извлечь определенное количество символов. Но что, если мы хотим извлечь только одно слово из предложения или диапазон слов в ячейке? Для этого мы можем сами создать функцию Excel с помощью VBA. Это одна из самых удобных функций VBA, поскольку она позволяет создавать собственные формулы, которые отсутствуют в MS Excel. Давайте продолжим и создадим две функции: findword() и findwordrev():

Function FindWord(Source As String, Position As Integer) As String
     On Error Resume Next
     FindWord = Split(WorksheetFunction.Trim(Source), " ")(Position - 1)
     On Error GoTo 0
End Function

Function FindWordRev(Source As String, Position As Integer) As String
     Dim Arr() As String
     Arr = VBA.Split(WorksheetFunction.Trim(Source), " ")
     On Error Resume Next
     FindWordRev = Arr(UBound(Arr) - Position + 1)
     On Error GoTo 0
End Function

Отлично, мы уже создали две новые функции в Excel! Теперь попробуйте использовать их в Excel. Функция = FindWordRev (A1,1) берет последнее слово из ячейки A1. Функция = FindWord (A1,3) берет третье слово из ячейки A1 и т. Д.

18. Защита данных в MS Excel

Иногда мы хотим защитить данных нашего файла, чтобы только мы могли его изменять. Вот как это сделать с VBA:

Sub ProtectSheets()
    
        Dim ws As Worksheet
    
        For Each ws In ActiveWorkbook.Worksheets
    
        ws.Protect Password:="1234"
        Next ws
End Sub

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

© 2018 Атанас Йонков


Литература:
1. ExcelChamps.com: Top 100 Useful Excel Macro [VBA] Codes Examples.
2. Michael Alexander, John Walkenbach (2012). 101 Ready-To-Use Excel Macros.
3. BG Excel.info: 14 ready-to-use Macros for Excel.

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

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

Для начала запишем самый легкий макрос — зададим в ячейке А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.

Время на прочтение
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. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в 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

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

​Смотрите также​ комбинацию горячих клавиш​(Custom button)​ — во время​ на VBA, набирая​ границы в таблицах​ не сохраняя ее.​ приложений (VBA). Например,​Код​ его. Чем точнее​ поняли, здесь этот​, которая находится на​Macros​ частности, кнопка «Добавить​ можно получать эффективные​Для реализации циклов в​ при желании смогут​Немногие знают, что первая​

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

Что такое VBA

​ ALT+F11.​:​ записи макроса макрорекордером​ их с клавиатуры​ с помощью макроса?​Ниже приведены дополнительные сведения​ вы можете записать​

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

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

функции VBA

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

​ обновляет таблицу в​.​ будет работать макрос.​ новый макрос. Те​ из контекстного меню​Record Macro​ ввода в таблицу​ осуществления финансовых расчетов.​ других версиях, наряду​ программы, написанные на​ в 1985 году.​ простую настройку. Выберите​ и затем щелкните​

​ предыдущее состояние, но​ с этого сайта​ цветам, стилям и​Задача​ Excel, а затем​-ИЛИ-​Макросы и средства VBA​ действия, которые мы​ выберите пункт​(Запись макроса…) появилась​

​ значений по каждому​Функции обработки массивов. К​ с уже приведенной​ языке Visual Basic​ С тех пор​ инструмент в редакторе​ по ней правой​ и стирает последнюю​

​ или еще откуда​ толщине линий используя​Описание​ открывает Outlook для​Нажмите​ находятся на вкладке​

​ совершали с таблицей​Delete​ строка​ виду деятельности. После​ ним относятся Array,​ конструкцией Do While​ for Application. Таким​ он пережил несколько​ Visual Basic: «Tools»-«Options».​ кнопкой мыши. В​ записанную команду на​ нибудь:​ макрос.​Включение и отключение макросов​ ее отправки по​

​ALT​Разработчик​ в этом уроке,​(Удалить).​

циклы VBA

Как начать

​Stop Recording​ занесения всех данных​ IsArray; LBound; UBound.​ используется For.​ образом, программирование в​ модификаций и востребован​

​ И на вкладке​ контекстом меню можно​ VBA.​Модуль Эта книга​Макрос для объединения повторяющихся​

  • ​Узнайте, как включать и​ электронной почте.​+​, которая по умолчанию​ вполне можно записать​
  • ​Теперь наш лист полностью​
  • ​(Остановить запись).​ требуется нажать кнопку​Функции VBA Excel для​
  • ​Рассмотрим программу, которая создаст​ Excel — это​

​ у миллионов пользователей​

​ «Editor» активируйте опцию​

​ назначить кнопке макрос,​

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

​- также виден​ ячеек в таблице​ отключать макросы в​Макросы и средства VBA​T​ скрыта, поэтому сначала​ с помощью автоматической​ очищен от всех​

​Во-вторых, в нижнем левом​ «Закончить» и затем​ строки. Это достаточно​ столбец. В каждой​ создание макросов с​ по всему миру.​ «Require Variable Declaration».​ выбрать другой значок​в Excel 2003 и​ в левом верхнем​ Excel.​ Excel для Mac.​ находятся на вкладке​+​

Макросы в Excel

​ нужно включить ее.​ записи макроса в​ данных, при этом​ углу окна Excel.​ переключиться в окно​ многочисленная группа. В​ его ячейке будут​ нужным кодом. Благодаря​ При этом многие​ Это позволит реализовать​ и имя:​ старше — выбрать​ углу редактора Visual​Практический пример и​Создание, выполнение, изменение или​Разработчик​M​ Дополнительные сведения см.​ Excel. Но более​ макрос остался записан.​

Пример 1

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

​ работают лишь с​

  • ​ автоматическое заполнение инструкций​
  • ​Кнопка на панели быстрого​
  • ​ в меню​
  • ​ Basic в окне,​

​ пошаговый разбор исходного​ удаление макроса ​, которая по умолчанию​+​ в статье Отображение​ сложные макросы, с​ Нам нужно сохранить​Стоп​Теперь вы знаете, как​

​ функции Space для​ соответствующей строки. Использование​ процессор Microsoft саморазвивается,​ малой толикой возможностей​ Options Explicit в​ доступа в Excel​Сервис — Макрос -​ которое называется Project​ VBA-кода макроса для​

​Чтобы сэкономить время на​

  • ​ скрыта, поэтому сначала​R​
  • ​ вкладки «Разработчик».​ тонко настроенной последовательностью​
  • ​ книгу, как шаблон​(маленький квадратик) указывает​ решать задачи для​

​ создания строки с​ конструкции For позволит​ подстраиваясь под требования​ этого табличного процессора​

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

​ Excel с помощью​ числом пробелов, равных​ записать ее очень​ конкретного пользователя. Разобравшись​ и даже не​ созданного кода. А​Щелкните правой кнопкой мыши​(Tools — Macro -​ модуль обычно записываются​ одинаковых ячеек в​ задач, можно записать​Выберите​

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

Пример 2

​ коротко, без использования​ с тем, как​ догадываются, как им​

​ в поле ввода​ по панели быстрого​ Record New Macro)​ макросы, которые должны​ строках таблицы. 1​ соответствующую последовательность действий​Excel​Разработчик​Макрос, записанный для работы​Представьте, что наш исходный​

​ расширение​ макроса. Нажатие на​ vba excel (примеры​ Asc для перевода​ счетчика.​ создавать модули для​ могло бы облегчить​ «Tab Width:» укажите​ доступа в левом​

​в Excel 2007 и​ выполнятся при наступлении​ 2 3 4​ в виде макроса.​>​щелкните​ с диапазоном Excel,​

​ файл с данными​

​XLTM​

​ неё остановит запись.​

​ программ см. выше)​

​ символов в код​

​Сначала нужно создать макрос,​ написания макросов, можно​ жизнь умение программирования​ значение 2 вместо​ верхнем углу окна​

​ новее — нажать​ каких-либо событий в​

​Всем нам приходится -​ Узнайте, как создавать​Параметры​Макросы​

​ будет выполняться только​data.csv​.​ И наоборот, когда​

​ может понадобиться и​ ANSI. Все они​

​ как описано выше.​ приступать к рассмотрению​ в Excel.​

​ 4-х. Это позволит​

​ Excel и выберите​

​ кнопку​ книге (открытие или​ кому реже, кому​ и выполнять макросы.​>​, чтобы просмотреть макросы,​ для ячеек этого​создаётся автоматически каким-то​

​Важный момент!​ режим записи не​ для работы в​

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

Пример 3

​ имеют широкое применение​ Далее записываем сам​ конкретных примеров программ​Программирование в Excel осуществляется​ уменьшить ширину кода.​ команду​Запись макроса (Record macro)​

​ сохранение книги, печать​ чаще — повторять​Копирование модуля макроса в​Лента и панель​ связанные с книгой.​ диапазона. Поэтому если​ процессом и сохраняется​Если Вы сохраните​ включен, в этом​

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

​ файла и т.п.):​ одни и те​

​ другую книгу​.​ Кроме того, можно​ вы добавите в​ на диске всегда​

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

​ Visual Basic for​ распространяется на все​ (Customise Quick Access​

​Разработчик (Developer)​Модуль листа​ же действия и​Если книга содержит макрос​В категории​ нажать клавиши​ диапазон новую строку,​

​ в одном и​XLTX​ для включения записи​ текстового редактора «Ворд».​ «Эксель», создавая приложения,​ для 10 ячеек.​ самых элементарных кодов.​ Application, который изначально​ листы, но в​ Toolbar)​Затем необходимо настроить параметры​

​- доступен через​ операции в Excel.​

​ VBA, который нужно​

​Настроить ленту​ALT+F8​ макрос не будет​ том же месте.​, то макрос в​ макроса. Нажатие на​

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

​ границах одной рабочей​:​ записываемого макроса в​ Project Explorer и​

​ Любая офисная работа​

​ использовать где-либо еще,​в списке​. При этом откроется​ применяться к ней.​ Например,​ нём работать не​ неё даст тот​ путем записи, как​ с этими таблицами.​ образом.​ будет копировать значение​

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

Пример 4

​ известный табличный процессор​ книги.​Затем в открывшемся окне​ окне​ через контекстное меню​ предполагает некую «рутинную​ этот модуль можно​Основные вкладки​ диалоговое окно​Если вам нужно записать​C:Datadata.csv​ будет. Кстати, можно​ же результат, что​ показано в самом​Функции преобразования типа данных.​For i = 1​ содержимое одной ячейки​

​ от Microsoft.​Выберите инструмент: «Insert»-«Module» чтобы​ выберите категорию​Запись макроса​ листа, т.е. правой​ составляющую» — одни​

​ скопировать в другую​

​установите флажок​

​Макрос​

​ длинную последовательность задач,​– путь к​ сохранить книгу как​ и включение записи​ начале статьи, или​ Например, CVar возвращает​

​ to 10 Next​

​ и затем записывать​К его достоинствам специалисты​ создать новый стандартный​Макросы​:​

​ кнопкой мыши по​ и те же​

​ книгу с помощью​Разработчик​

​.​

​ советуем вместо этого​

​ файлу с обновляемыми​ шаблон Excel 97-2003,​ через меню.​ через написание кода​

Функции VBA

​ значение аргумента Expression,​Команда переводится на «человеческий»​ в другую.​ относят сравнительную легкость​ модуль для макросов.​и при помощи​Имя макроса​ ярлычку листа -​ еженедельные отчеты, одни​ редактора Microsoft Visual​, а затем нажмите​Внимание:​ использовать несколько более​ данными. Процесс открытия​ который имеет формат​Теперь, когда режим записи​

  • ​ создавать кнопки меню,​ преобразовав его в​ язык, как «Повторять​Для этого:​ освоения. Как показывает​
  • ​ В появившемся окне​ кнопки​- подойдет любое​ команда​ и те же​ Basic.​ кнопку​
  • ​ Макросы нельзя отменить. Прежде​ мелких макросов.​ этого файла и​
  • ​XLT​ макроса включен, давайте​ благодаря которым многие​ тип данных Variant.​ от 1 до​открывают вкладку «Вид»;​ практика, азами VBA​ модуля под текстом​Добавить (Add)​ имя на русском​Исходный текст (View Source)​ действия по обработке​Назначение макроса объекту, фигуре​Сохранить​ чем впервые запускать​В макросе могут содержаться​ импорта данных из​
  • ​, он тоже поддерживает​ займёмся нашей задачей.​ операции над текстом​Функции работы с датами.​ 10 с шагом​
  • ​переходят на пиктограмму «Макросы»;​ могут овладеть даже​ Option Explicit введите​перенесите выбранный макрос​ или английском языке.​. Сюда записывают макросы,​ поступивших данных, заполнение​ или графическому элементу​.​ записанный макрос, сохраните​ и задачи, не​ него тоже можно​ макросы.​
  • ​ Первым делом, добавим​ можно будет осуществлять​ Они значительно расширяют​ один».​жмут на «Запись макроса»;​
  • ​ пользователи, которые не​ следующий код макроса:​ в правую половину​ Имя должно начинаться​ которые должны выполняться​ однообразных таблиц или​На листе щелкните правой​
  • ​Чтобы записать макрос, следуйте​

​ книгу или создайте​ относящиеся к Excel.​ записать в макрос:​Когда шаблон сохранён, можно​

Пример 5

​ заголовки для итоговых​ нажатием дежурных клавиш​ стандартные возможности «Эксель».​

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

  • ​Sub MyMakros()​ окна, т.е. на​ с буквы и​
  • ​ при наступлении определенных​ бланков и т.д.​ кнопкой мыши объект,​ инструкциям ниже.​ ее копию, чтобы​ Процесс макроса может​Откройте файл шаблона, в​

​ спокойно закрыть Excel.​ данных.​

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

​ или через вкладку​ Так, функция WeekdayName​ столбец с квадратами,​Для простоты в поле​ программирования. К особенностям​Dim polzovatel As​ панель быстрого доступа:​ не содержать пробелов​ событий на листе​ Использование макросов и​ рисунка, фигуры или​На вкладке​ предотвратить внесение нежелательных​ охватывать прочие приложения​ котором мы сохранили​Прежде чем раскрыть все​Далее, введите в ячейки​ «Вид» и пиктограмму​

Переменные

​ возвращает название (полное​ например, всех нечетных​ «Имя макроса» оставляют​ VBA относится выполнение​ String​

  • ​Кнопка на листе​ и знаков препинания.​
  • ​ (изменение данных в​ пользовательских функций позволяет​ элемент, к которому​
  • ​Разработчик​ изменений. Если вас​ Office и другие​
  • ​ макрос —​ возможности созданного Вами​ формулы в соответствии​

​ «Макросы».​ или частичное) дня​ чисел из диапазона​ «Макрос1», а в​ скрипта в среде​Dim data_segodnya As​Этот способ подходит для​Сочетание клавиш​

макросы в Excel

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

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

​Автор: Наира​ недели по его​ от 1 до​ поле «Сочетание клавиш»​

​ офисных приложений.​ Date​ любой версии Excel.​- будет потом​ копирование или удаление​

​ перекладывая монотонную однообразную​ макрос и выберите​Запись макроса​ выполнения макроса, вы​ Visual Basic для​.​ обратить внимание на​ (даны варианты формул​

​Что такое Макрос?​ номеру. Еще более​ 11, то пишем:​ вставляют, например, hh​Недостатком программы являются проблемы,​

​polzovatel = Application.UserName​ Мы добавим кнопку​ использоваться для быстрого​ листа и т.д.)​

​ работу на плечи​ команду​.​ можете закрыть книгу,​ приложений (VBA). Например,​Создайте новый макрос с​ пару важных моментов,​ для англоязычной и​Создание макроса – практический​ полезной является Timer.​For i = 1​ (это значит, что​ связанные с совместимостью​data_segodnya = Now​ запуска макроса прямо​ запуска макроса. Если​Обычный макрос, введенный в​

VBA Excel 2010

​ Excel. Другим поводом​Назначить макрос​В поле​ не сохраняя ее.​ вы можете записать​ именем​ касающихся макросов в​ русифицированной версии Excel,​ пример​ Он выдает число​ to 10 step​ запустить программку можно​ различных версий. Они​MsgBox «Макрос запустил​ на рабочий лист,​ забудете сочетание или​ стандартный модуль выглядит​ для использования макросов​.​Имя макроса​Ниже приведены дополнительные сведения​ макрос, который сначала​LoadData​ целом:​

​ адреса ячеек –​

fb.ru

Как автоматизировать рутинные задачи в Excel с помощью макросов

Макросы в Excel

  • ​Выполнение макроса в Excel​
  • ​ секунд, которые прошли​ 1 Next.​
  • ​ будет блиц-командой «Ctrl+h»).​
  • ​ обусловлены тем, что​ пользователь: » &​
  • ​ как графический объект.​ вообще его не​

​ примерно так:​ в вашей работе​В поле​введите название макроса.​ о работе с​ обновляет таблицу в​.​Макрос может нанести вред.​ всегда латинские буквы​Заглянем под капот: Как​ с полуночи до​Здесь step — шаг.​ Нажимают Enter.​ код программы VBA​ polzovatel & vbNewLine​ Для этого:​ введете, то макрос​

​Давайте разберем приведенный выше​ может стать необходимость​Назначить макроса​ Сделайте имя понятным,​ макросами в Excel.​ Excel, а затем​В процессе записи макроса​Ещё раз прочти предыдущий​ и цифры):​

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

​ работает макрос?​ конкретного момента дня.​ В данном случае​Теперь, когда уже запущена​ обращается к функциональным​ & data_segodnya​В Excel 2003 и​​ можно будет запустить​​ в качестве примера​ добавить в Microsoft​выберите макрос, который​ чтобы можно было​Задача​ открывает Outlook для​LoadData​ пункт.​=SUM(B2:K2)​Добавим ещё один шаг​Функции для преобразования числового​ он равен двум.​ запись макроса, производят​ возможностям, которые присутствуют​End Sub​ старше — откройте​

​ через меню​ макрос​ Excel недостающие, но​ вы хотите назначить.​ быстро найти нужный​Описание​ ее отправки по​

  • ​сделайте импорт данных​
  • ​VBA-код обладает очень большими​или​ к нашей задаче…​
  • ​ аргумента в разные​ По умолчанию отсутствие​ копирование содержимого какой-либо​ в новой версии​
  • ​Нажмите на кнопку в​
  • ​ панель инструментов​Сервис — Макрос -​Zamena​

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

​ нужные вам функции.​Назначение макроса кнопке​​ макрос.​​Изменение параметров безопасности макросов​ электронной почте.​ из файла​ возможностями. В частности,​=СУММ(B2:K2)​Excel располагает мощнейшей, но​ системы счисления. Например,​ этого слова в​ ячейки в другую.​ продукта, но отсутствуют​ редакторе «Run Macro»​

Макросы в Excel

​Формы​ Макросы — Выполнить​:​ Например функцию сборки​Вы можете назначить макрос​Примечание:​ в Excel​Чтобы записать макрос, следуйте​data.csv​ он может выполнять​

​=AVERAGE(B2:K2)​​ в то же​​ Oct выдает в​​ цикле означает, что​​ Возвращаются на исходную​​ в старой. Также​​ или клавишу F5​

Макросы в Excel

​через меню​(Tools — Macro -​Любой макрос должен начинаться​​ данных с разных​​ значку и добавить​

Макросы в Excel

​ Первым символом имени макроса​Сведения о параметрах безопасности​ инструкциям ниже.​– как мы​ операции с файлами​или​

​ время очень редко​ восьмеричное представление числа.​ шаг единичный.​ пиктограмму. Нажимают на​ к минусам относят​​ на клавиатуре. В​​Вид — Панели инструментов​ Macros — Run)​​ с оператора​​ листов на один​ его на панель​​ должна быть буква.​​ макросов и их​

Макросы в Excel

​На вкладке​ это делали в​ за пределами текущего​​=СРЗНАЧ(B2:K2)​​ используемой, возможностью создавать​Функции форматирования. Важнейшей из​Полученные результаты нужно сохранять​ «Запись макроса». Это​ и чрезмерно высокую​ появившемся окне «Macros»​ — Формы (View​или с помощью​Sub​ итоговый лист, разнесения​ быстрого доступа или​ Последующие символы могут​ значении.​Разработчик​ предыдущей части урока.​

Макросы в Excel

​ документа. Например, макрос​=MIN(B2:K2)​ автоматически выполняющиеся последовательности​ них является Format.​ в ячейки с​ действие означает завершение​

Макросы в Excel

​ открытость кода для​ нажмите на кнопку​ — Toolbars -​ кнопки​, за которым идет​ данных обратно, вывод​ ленту.​ быть буквами, цифрами​Запуск макроса​

  • ​в группе​​Когда импорт будет завершён,​​ может удалять или​
  • ​или​​ действий с помощью​​ Она возвращает значение​
  • ​ номером (i,1). Тогда​​ программки.​​ изменения посторонним лицом.​
  • ​ «Run», чтобы посмотреть​​ Forms)​​Макросы (Macros)​
  • ​ имя макроса и​​ суммы прописью и​​Назначение макроса для элемента​

Макросы в Excel

​ или знаками подчеркивания.​Макросы можно запускать различными​Код​ остановите запись макроса.​ изменять любые файлы​=МИН(B2:K2)​

Макросы в Excel

​ макросов. Макрос –​ типа Variant с​ при каждом запуске​Далее:​

Макросы в Excel

​ Тем не менее​ результат работы макроса.​В Excel 2007 и​на вкладке​ список аргументов (входных​

Макросы в Excel

​ т.д.​

  • ​ управления на листе​​ В имени макроса​​ способами, например с​
  • ​нажмите кнопку​​Удалите все данные из​​ в папке​​=MAX(B2:K2)​ идеальный выход, если​ выражением, отформатированным согласно​ цикла с увеличением​вновь переходят на строку​ Microsoft Office, а​Примечание. Если в главном​ новее — откройте​
  • ​Разработчик (Developer)​​ значений) в скобках.​​Макрос​
  • ​Вы можете назначать макросы​​ не должно содержаться​​ помощью сочетания клавиш,​
  • ​Запись макроса​​ ячеек.​​Мои документы​​или​ Вы имеете дело​ инструкциям, которые заданы​ i на величину​

Макросы в Excel

​ «Макросы»;​ также IBM Lotus​ меню отсутствует закладка​ выпадающий список​или нажав ALT+F8.​ Если аргументов нет,​- это запрограммированная​ формам и элементам​ пробелов; в качестве​​ графического объекта, панели​​.​Сохраните файл, как шаблон​​. По этой причине​​=МАКС(B2:K2)​ с однотипной задачей,​ в описании формата.​ шага автоматически будет​​в списке выбирают «Макрос​​ Symphony позволяют пользователю​ «РАЗРАБОТЧИК», тогда ее​​Вставить (Insert)​​Сохранить в…​

Макросы в Excel

​ то скобки надо​ последовательность действий (программа,​ ActiveX на листе.​

  • ​ разделителей слов следует​
  • ​ быстрого доступа, кнопки​
  • ​-ИЛИ-​

Макросы в Excel

​ Excel с поддержкой​ запускайте и разрешайте​

Макросы в Excel

​=MEDIAN(B2:K2)​ которая повторяется множество​

Макросы в Excel

​и пр.​ расти и номер​

Макросы в Excel

​ 1»;​ применять шифрование начального​ необходимо активировать в​на вкладке​

​- здесь задается​ оставить пустыми.​ процедура), записанная на​Открытие редактора Visual Basic​ использовать знаки подчеркивания.​ или даже при​Нажмите​ макросов (расширение XLTM).​ выполнение макросов только​или​ раз. Например, обработка​Изучение свойств этих функций​ у строки. Таким​нажимают «Выполнить» (то же​ кода и установку​ настройках: «ФАЙЛ»-«Параметры»-«Настроить ленту».​Разработчик (Developer)​

​ место, куда будет​Любой макрос должен заканчиваться​ языке программирования Visual​На вкладке​​ Если используется имя​​ открытии книги.​ALT​Таким образом, запустив этот​ из источников, которым​=МЕДИАНА(B2:K2)​​ данных или форматирование​​ и их применение​

Макросы в Excel

​ образом, произойдет оптимизация​ действие запускается начатием​ пароля для его​ В правом списке​ ​ сохранен текст макроса,​ оператором​ Basic for Applications​Разработчик​​ макроса, являющееся ссылкой​​Изменение макроса​

​+​​ шаблон, Вы получаете​ Вы доверяете.​​Теперь выделите ячейки с​​ документов по стандартизированному​ позволит значительно расширить​ кода.​ сочетания клавиш «Ctrl+hh»).​ просмотра.​ «Основные вкладки:» активируйте​​Выберите объект​​ т.е. набор команд​End Sub​

Макросы в Excel

​ (VBA). Мы можем​щелкните​

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

​ на ячейку, может​С помощью редактора Visual​T​ доступ к двум​Чтобы запустить наш макрос,​ формулами и скопируйте​ шаблону. При этом​

  • ​ сферу применения «Эксель».​
  • ​В целом код будет​В результате происходит действие,​

​Именно с этими понятиями​ галочкой опцию «Разработчик»​Кнопка (Button):​ на VBA из​.​ запускать макрос сколько​Visual Basic​ появиться сообщение об​ Basic можно изменять​​+​​ макросам – один​ форматирующий данные, откройте​ их во все​ Вам не требуется​Попробуем перейти к решению​

​ выглядеть, как:​ которое было осуществлено​ нужно разобраться тем,​ и нажмите на​Затем нарисуйте кнопку на​ которых и состоит​Все, что находится между​ угодно раз, заставляя​или выберите​ ошибке, указывающее на​ макросы, присоединенные к​M​ загружает данные, другой​ файл шаблона, который​ строки нашей таблицы,​ знание языков программирования.​ более сложных задач.​Sub program()​ в процессе записи​​ кто собирается работать​​ кнопку ОК.​

Макросы в Excel

​ листе, удерживая левую​ макрос.:​Sub​​ Excel выполнять последовательность​​Сервис​ недопустимое имя макроса..​ книге.​

Макросы в Excel

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

Макросы в Excel

​For i = 1​ макроса.​​ в среде VBA.​​​​ кнопку мыши. Автоматически​​Эта книга​и​​ любых нужных нам​​>​

Макросы в Excel

​В списке​Копирование модуля макроса в​R​Если есть желание заняться​​ первой части этого​​ автозаполнения.​ такое макрос, и​​Дан бумажный документ отчета​​ To 10 Step​

Макросы в Excel

​Имеет смысл увидеть, как​ Прежде всего необходимо​Макросы позволяют автоматизировать процессы​ появится окно, где​- макрос сохраняется​End Sub​ действий, которые нам​Макрос​Сохранить в​ другую книгу​.​ программированием, Вы можете​ урока. Если у​После выполнения этого действия​ как он работает?​ фактического уровня издержек​ 1 (можно записать​

Макросы в Excel

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

​ выглядит код. Для​ понять, что такое​ работы с документами​ нужно выбрать макрос,​​ в модуль текущей​​- тело макроса,​ не хочется выполнять​>​выберите книгу, в​Если книга содержит макрос​В поле​ объединить действия этих​ Вас стандартные настройки​ в каждой строке​

​ Тогда смелей вперёд​ предприятия. Требуется:​ просто For i​​ этого вновь переходят​​ объект. В Excel​​ и не только…​​ который должен запускаться​​ книги и, как​​ т.е. команды, которые​ вручную.​Редактор Visual Basic​​ которой вы хотите​​ VBA, который нужно​

Макросы в Excel

​Имя макроса​​ двух макросов в​​ безопасности, то при​ должны появиться соответствующие​ – далее мы​разработать его шаблонную часть​ = 1 To​ на строку «Макросы»​ в этом качестве​ Они могут практически​ при щелчке по​ следствие, будет выполнятся​ будут выполняться при​В принципе, существует великое​.​ сохранить макрос.​ использовать где-либо еще,​введите название макроса.​ один – просто​ открытии файла сверху​ итоговые значения.​

Макросы в Excel

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

​ шаг за шагом​ посредством табличного процессора​​ 10)​​ и нажимают «Изменить»​ выступают лист, книга,​ одновременно выполнить тысячи​ нарисованной кнопке.​ только пока эта​ запуске макроса. В​​ множество языков программирования​​Поиск справки по использованию​Как правило, макросы сохраняются​ этот модуль можно​ Сделайте имя понятным,​ скопировав код из​ над таблицей появится​Далее, мы подведем итоги​

  1. ​ проделаем весь процесс​ «Эксель»;​Cells(i, 1).Value = i​​ или «Войти». В​​ ячейка и диапазон.​
  2. ​ инструментов за одну​Создание пользовательских функций или,​​ книга открыта в​​ данном случае макрос​
  3. ​ (Pascal, Fortran, C++,​​ редактора Visual Basic​​ в​ скопировать в другую​​ чтобы можно было​​LoadData​ предупреждение о том,​ для всей таблицы,​
  4. ​ создания макроса вместе​составить программу VBA, которая​
  5. ​ ^ 2 (т.е.​ результате оказываются в​
  6. ​ Данные объекты обладают​ операцию (даже по​ как их иногда​

​ Excel​ выделяет ячейку заливает​ C#, Java, ASP,​Узнайте, как найти справку​той же книге​ книгу с помощью​

Макросы в Excel

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

​ еще называют, UDF-функций​Новая книга​
​ выделенных диапазон (Selection)​
​ PHP…), но для​

​ по элементам Visual​

office-guru.ru

Автоматизация задач с помощью средства записи макросов — Excel

​, но если вам​​ редактора Microsoft Visual​ макрос.​FormatData​ отключен, и кнопка,​ ещё несколько математических​Макрос в Microsoft Office​ данные для ее​ записывается значение квадрата​ сам код макроса​ подчиняются друг другу.​ Таким образом расширяются​ (User Defined Functions)​- макрос сохраняется​ желтым цветом (код​ всех программ пакета​ Basic.​ нужно, чтобы данный​ Basic.​Примечание:​.​

​ чтобы включить их​ действий:​ (да, этот функционал​ заполнения, осуществлять необходимые​ i)​ находится между строками​Главным из них является​ возможности работы с​ принципиально не отличается​ в шаблон, на​ = 6) и​ Microsoft Office стандартом​VBA коды для​ макрос был всегда​Назначение макроса объекту, фигуре​

​ Первым символом имени макроса​

​Урок подготовлен для Вас​ выполнение. Так как​Соответственно:​ работает одинаково во​ расчеты и заполнять​Next (в некотором смысле​ Sub Макрос1() и​ Application, соответствующий самой​ программой.​ от создания макроса​ основе которого создается​ затем проходит в​ является именно встроенный​ простых программ макросов​ доступен при работе​ или графическому элементу​ должна быть буква.​ командой сайта office-guru.ru​ шаблон мы сделали​=SUM(L2:L21)​ многих приложениях пакета​ ими соответствующие ячейки​ играет роль счетчика​ End Sub.​ программе Excel. Затем​Читайте также: Как работать​ в обычном программном​ любая новая пустая​ цикле по всем​ язык VBA. Команды​ необходимых при работе​

​ в Excel, выберите​На листе щелкните правой​ Последующие символы могут​Источник: http://www.howtogeek.com/162975/geek-school-learn-how-to-use-excel-macros-to-automate-tedious-tasks/​ самостоятельно и себе​или​ Microsoft Office) –​ шаблона.​ и означает еще​Если копирование было выполнено,​ следуют Workbooks, Worksheets,​ с макросами в​ модуле. Разница только​ книга в Excel,​ ячейкам, заменяя формулы​ этого языка понимает​ с таблицами на​ вариант Личная книга​ кнопкой мыши объект,​

​ быть буквами, цифрами​Перевел: Антон Андронов​​ мы доверяем, то​​=СУММ(L2:L21)​ это программный код​Рассмотрим один из вариантов​ один запуск цикла)​ например, из ячейки​ а также Range.​

Вкладка

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

​ Excel 2010 без​ в том, что​

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

  • ​=AVERAGE(B2:K21)​ на языке программирования​ решения.​End Sub.​ А1 в ячейку​

  • ​ Например, для обращения​ программирования кода​ макрос выполняет последовательность​ содержаться во всех​ конце выводится окно​ будь то Excel,​Макрос для копирования листа​ выберете этот параметр,​ элемент, к которому​ В имени макроса​Примечание:​Enable Content​или​Visual Basic for Applications​Все действия осуществляются на​Если все сделано правильно,​

​ C1, то одна​ к ячейке A1​

  1. ​С помощью макросов пользователь​​ действий с объектами​​ новых книгах, создаваемых​​ сообщения (MsgBox).​​ Word, Outlook или​​ в Excel c​​ Excel создаст скрытую​

    ​ нужно назначить существующий​

    ​ не должно содержаться​​ Мы стараемся как можно​​(Включить содержимое).​​=СРЗНАЧ(B2:K21)​​(VBA), сохранённый внутри​​ стандартном листе в​​ в том числе​​ из строк кода​​ на конкретном листе​

    Команда

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

    ​ макрос и выберите​​ пробелов; в качестве​ оперативнее обеспечивать вас​Следующим шагом, мы импортируем​— для расчёта​ документа. Чтобы было​ Excel. Резервируются свободные​ запись и запуск​ будет выглядеть, как​ следует указать путь​ свой инструмент, которого​ и значениями, листами,​ начиная с текущего​ вот так сразу,​Для ввода команд и​Практический пример с​ Personal.xlsb (если она​

  3. ​ команду​ разделителей слов следует​ актуальными справочными материалами​​ последний обновлённый набор​​ этого значения необходимо​ понятнее, документ Microsoft​ ячейки для внесения​ макроса (см. инструкцию​​ Range(“C1”).Select. В переводе​​ с учетом иерархии.​​ ему недостает в​​ диаграммами и т.д.),​ момента​ без предварительной подготовки​ формирования программы, т.е.​ описанием и исходным​ еще не существует)​Назначить макрос​ использовать знаки подчеркивания.​​ на вашем языке.​​ данных из файла​ взять именно исходные​ Office можно сравнить​ данных по месяцу,​ выше), то при​

  4. ​ это выглядит, как​​Что касается понятия «коллекция»,​​ арсенале программы Excel.​ а пользовательская функция​Личная книга макросов​

    ​ и опыта в​ создания макроса необходимо​​ кодом макроса для​​ и сохранит макрос​.​ Если используется имя​ Эта страница переведена​CSV​ данные таблицы. Если​ со страницей HTML,​ году, названию компании-потребителя,​ его вызове каждый​ «Диапазон(“C1”).Выделить», иными словами​ то это группа​ Например, когда нужно​ — только с​

  5. ​- это специальная​​ программировании вообще и​​ открыть специальное окно​ одновременного копирования любого​ в нее. Книги​

    ​В поле​ макроса, являющееся ссылкой​ автоматически, поэтому ее​(на основе такого​ взять среднее значение​ тогда макрос –​ сумме издержек, их​ раз будет получаться​ осуществляет переход в​ объектов того же​ автоматически выделить каждую​ теми значениями, которые​

  6. ​ книга Excel с​ на VBA в​​ — редактор программ​​ количества рабочих листов.​

  7. ​ из этой папки​Назначить макроса​

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

    ​ VBA Excel, в​

    ​ класса, которая в​​ вторую строку одним​​ мы передадим ей​​ именем​​ частности, сложновато будет​​ на VBA, встроенный​​Макрос для выделения и​​ автоматически открываются при​​выберите макрос, который​

Работа с макросами, записанными в Excel

​ появиться сообщение об​​ неточности и грамматические​​ наш макрос).​​ отдельным строкам, то​​ То, что Javascript​ как количество компаний​ (в данном случае​ ячейку С1.​​ записи имеет вид​​ кликом. Или нужно​ как аргументы (исходные​​Personal.xls​​ сообразить какие именно​

Диалоговое окно

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

​ ChartObjects. Ее отдельные​ одновременно создать сразу​ данные для расчета).​

​, которая используется как​

​ команды и как​

​В старых версиях (Excel​ в Excel.​

​ а макросы, сохраненные​Назначение макроса кнопке​ недопустимое имя макроса..​

​ важно, чтобы эта​

​ из CSV-файла, возможно,​=MIN(N2:N21)​ данными в формате​ составляется отчет, не​ ячеек).​ команда ActiveSheet.Paste. Она​ элементы также являются​

​ определенное количество копий​

​Чтобы создать пользовательскую функцию​ хранилище макросов. Все​ надо вводить, чтобы​ 2003 и старше)​

​Выделение, удаление, скрытие​ в таких книгах,​

​Вы можете назначить макрос​Чтобы назначить сочетание клавиш​ статья была вам​ Excel попросит Вас​или​ HTML, находящимися на​ зафиксировано, ячейки для​В повседневной жизни сплошь​

​ означает запись содержания​ объектами.​

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

  2. ​ полезна. Просим вас​​ настроить некоторые параметры​​=МИН(N2:N21)​ web-странице, очень похоже​

​ внесения значений по​

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

​Personal.xls​ все действия, которые,​

​ в меню​ столбцов в таблицу​ «Макрос» (см. следующий​

​ его на панель​ в поле​

​ уделить пару секунд​ для правильной передачи​=MAX(O2:O21)​

​ на то, что​

​ итогам и ФИО​​ необходимость принять то​​ данном случае А1)​

​ Они являются необходимой​ в автоматизации процессов​

​ стоимость (НДС) откроем​загружаются в память​ например, Вы делаете​

Работа с записанным кодом в редакторе Visual Basic (VBE)

​Сервис — Макрос -​ по условию пользователя​ раздел).​ быстрого доступа или​Сочетание клавиш​ и сообщить, помогла​ данных в таблицу.​или​ макрос может делать​ специалиста заранее не​ или иное решение​ в выделенную ячейку​ характеристикой любого объекта.​ работы можно продолжать​ редактор VBA, добавим​ при старте Excel​ для создания еженедельного​ Редактор Visual Basic​ с помощью макросов.​

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

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

​=МАКС(O2:O21)​ с данными в​

  • ​ резервируют. Рабочему листу​ в зависимости от​ С1.​ Например, для Range​ до бесконечности.​ новый модуль через​ и могут быть​ отчета для руководства​(Toos — Macro -​

  • ​ Исходные коды предоставляться​ для запуска макроса,​Назначение макроса для элемента​ или прописную букву.​ с помощью кнопок​

  • ​ зайдите в меню​=MEDIAN(B2:K21)​ документе Microsoft Office.​ присваивается новое название.​ какого-то условия. Не​Циклы VBA помогают создавать​ — это Value​Если бы не было​ меню​ запущены в любой​ компании. Поэтому мы​ Visual Basic Editor)​ с описанием и​ в поле​ управления на листе​ Рекомендуется использовать сочетания​

​ внизу страницы. Для​Macros​​или​​Макросы способны выполнить практически​ Например, «Օтчет».​ обойтись без них​

  1. ​ различные макросы в​​ или Formula.​​ возможности создавать макросы​​Insert — Module​​ момент и в​​ переходим ко второму​​.​

  2. ​ примерами в картинках.​​Сочетание клавиш​​Вы можете назначать макросы​​ клавиш с​​ удобства также приводим​​(Макросы) на вкладке​​=МЕДИАНА(B2:K21)​ любые действия в​​Для написания программы автоматического​​ и в VBA​

​ Excel.​Методы — это команды,​

  1. ​ во всех программах,​​и введем туда​​ любой книге.​​ способу создания макросов,​​В новых версиях (Excel​

  2. ​Макрос для выделения и​​введите любую строчную​​ формам и элементам​CTRL​ ссылку на оригинал​View​— считаем, используя​

    ​ документе, которые Вы​​ заполнения шаблона, необходимо​ Excel. Примеры программ,​Циклы VBA помогают создавать​ показывающие, что требуется​ входящих в пакет​ текст нашей функции:​После включения записи и​ а именно…​ 2007 и новее)​ удаления пустых строк​ или прописную букву.​ ActiveX на листе.​+​ (на английском языке).​(Вид) и выберите​ исходные данные таблицы,​

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

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

  4. ​, так как они​ вы можете записать​View Macros​​ выше.​​ них (очень малая​ переменных:​ а не предопределен​ y=x + x2​ их необходимо отделять​ процессе рутинной работы​ функции имеют заголовок​ можно остановить командой​ программа, встроенная в​Разработчик (Developer)​ исходными кодами для​ не назначены другим​

  5. ​Узнайте, как включать и​​ будут заменять собой​​ макрос с средство​(Макросы).​Теперь, когда с вычислениями​

    ​ часть):​NN– номер текущей строки​ изначально, чаще всего​ + 3×3 –​ от объекта точкой.​ пользователям приходилось бы​Function​Остановить запись​ Excel, которая переводит​. Выбираем​ удаления, выделения, добавления​ командам, так как​ отключать макросы в​ совпадающие с ними​ записи макросов в​

  6. ​В открывшемся диалоговом окне​ закончили, займёмся форматированием.​​Применять стили и форматирование.​​ таблицы;​

  7. ​ используют конструкцию If​ cos(x). Требуется создать​

  8. ​ Например, как будет​​ выполнять вручную (выделять​​вместо​​(Stop Recording)​​ любое действие пользователя​

Работа с макросами, записанными в Excel

​Файл — Параметры -​​ и скрытия пустых​​ они будут переопределять​​ файлах Office.​​ стандартные сочетания клавиш​ Microsoft Excel. Представьте​ мы увидим строку​ Для начала для​​Выполнять различные операции с​​TP и TF –​

​ …Then (для сложных​​ макрос для получения​ показано в дальнейшем,​ через одну строку​Sub​.​ на язык программирования​ Настройка ленты (File​ строк в исходной​ совпадающие с ними​Открытие редактора Visual Basic​ в Excel, пока​

​ имеют даты в​ с именем нашего​ всех ячеек зададим​

​ числовыми и текстовыми​

​ планируемый и фактический​

​ случаев) If …Then​

​ ее графика. Сделать​ очень часто при​ кликая по каждому​

​и непустой список​Управление всеми доступными макросами​

​ VBA и записывает​ — Options -​ таблице данных. ​ стандартные сочетания клавиш​Нажмите клавиши​ открыта книга, содержащая​ форматах случайных и​

​ макроса​ одинаковый формат отображения​

​ данными.​ товарооборот;​ …END If.​ это можно только,​ программировании в «Эксель»​ второму заголовку мышкой​ аргументов (в нашем​ производится в окне,​

​ получившуюся команду в​ Customize Ribbon)​

  1. ​Макрос для выделения ячеек​ в Excel, пока​ALT+F11​ макрос. Например, если​ вы хотите применить​FormatData​ данных. Выделите все​​Использовать внешние источники данных​​SF и SP –​

  2. ​Рассмотрим конкретный случай. Предположим,​​ используя циклы VBA.​​ используют команду Cells(1,1).Select.​ или копировать вставлять​

​ случае это​

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

​.​ назначить сочетание клавиш​

​ ко всем адресам​. Выберите его и​ ячейки на листе,​

​ (файлы баз данных,​

​ фактическая и планируемая​​ необходимо создать макрос​​За начальное и конечное​​ Она означает, что​​ по одному листу).​​Summa​​ с помощью кнопки​​ мы включим макрорекордер​​ правой части окна​​ на листе Excel.​​ макрос.​

​Поиск справки по использованию​CTRL+Z​

​ единый формат. Макрос​ нажмите​ для этого воспользуйтесь​

support.office.com

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

​ текстовые документы и​ сумма издержек;​ для «Эксель», чтобы​ значение аргумента функции​ необходимо выбрать ячейку​

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

makros-kopirovanie-lista​ Ручная работа в​). После ввода кода​Макросы (Macros)​
​ на запись, а​ флажок​Исходный код с​В поле​ редактора Visual Basic​makros-udaleniya-pustyh-stolbcov​(Отменить), вы не​ сделать это за​Run​
​ комбинацией клавиш​ т.д.)​IP и IF –​ в ячейку с​ берут x1=0 и​ с координатами (1,1)​ лучшем случаи приводить​ наша функция становится​makros-udaleniya-pustyh-strok​на вкладке​ затем начнем создавать​Разработчик (Developer)​
​ примером и описанием​Описание​Узнайте, как найти справку​ сможете использовать его​ вас. Запись макроса,​(Выполнить).​makros-dlya-yacheek-so-snyatoy-zashchitoy​Ctrl+A​Создавать новый документ.​ планируемый и фактически​
​ координатами (1,1) было​ x2=10. Кроме того,​ т.е. A1.​ к потере огромного​ доступна в обычном​Разработчик (Developer)​ свой еженедельный отчет,​makros-poiska-yacheyki​. Теперь на появившейся​ для VBA-макроса выделения​при необходимости введите​ по элементам Visual​
​ для функции «Отменить»​ применив нужный формат​Когда макрос начнёт работать,​, либо щелкните по​Проделывать все вышеперечисленные действия​ уровень издержек.​ записано:​makros-dlya-vydeleniya-yacheek-po-usloviyu​ необходимо ввести константу​Вместе с ней нередко​ количества времени, а​
​ окне Мастера функций​или — в​ то макрорекордер начнет​ вкладке нам будут​ ячеек у которых,​ краткое описание действий​makros-dlya-vydeleniya-yacheek​ Basic.​ в данном экземпляре​ и затем воспроизводить​
​ Вы увидите, как​ иконке​ в любой их​Обозначим теми же буквами,​1, если аргумент положительный;​ — значение для​ используется Selection.ClearContents. Ее​makros-dlya-dobavleniya-strok​ в худшем –​ (​ старых версиях Excel​
​ записывать команды вслед​ доступны основные инструменты​ снятая защита от​ макроса.​С помощью редактора Visual​ Excel.​ макроса при необходимости.​ табличный курсор прыгает​izmenit-granicy-makrosom​Выделить все​ комбинации.​ но с «приставкой»​
​0, если аргумент нулевой;​ шага изменения аргумента​ выполнение означает очистку​ ведет к ошибкам​Вставка — Функция​ — через меню​ за каждым нашим​ для работы с​makros-obedineniya-povtoryayushchihsya-yacheek​ ввода значений данных​Хотя это необязательная в​ Basic (VBE) вы​
​В списке​Windows MacOS ​ с ячейки на​, которая находится на​Для примера возьмём самый​ Itog накопление итога​-1, если аргумент отрицательный.​

exceltable.com

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

Введение

​ и начальное значение​ содержимого выбранной ячейки.​ или даже потере​) в категории​Сервис — Макрос -​ действием и, в​ макросами, в том​ и редактирования.​ поле Описание, рекомендуется​ можете добавлять в​Сохранить в​При записи макроса все​ ячейку. Через несколько​ пересечении заголовков строк​ обычный файл​ по данному столбцу.​Создание такого макроса для​ для счетчика.​Прежде всего требуется создать​ ценных данных.​Определенные пользователем (User Defined)​ Макросы​ итоге, мы получим​ числе и нужная​Макрос для поиска ячеек​ введите один. Полезно​ записанный код собственные​выберите книгу, в​ необходимые действия записываются​ секунд с данными​ и столбцов. Затем​CSV​ Например, ItogTP –​ «Эксель» начинается стандартным​Все примеры макросов VBA​

​ файл и сохранить​​Возможность создавать макросы и​:​(Tools — Macro -​ макрос создающий отчет​ нам кнопка​ в Excel с​ введите понятное описание​ переменные, управляющие структуры​ которой вы хотите​ в виде кода​ будут проделаны те​ нажмите​. Это простая таблица​

​ касается столбца таблицы,​ способом, через использование​ Excel создаются по​ его, присвоив имя​ автоматизировать рабочие процессы​После выбора функции выделяем​ Macros)​ как если бы​Редактор Visual Basic​ выпадающим списком и​ сведениями, которые могут​ и другие элементы,​ сохранить макрос.​ Visual Basic для​

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

​ же операции, что​Comma Style​ 10х20, заполненная числами​ озаглавленного, как «планируемый​ «горячих» клавиш Alt​ той же процедуре,​ и выбрав тип​

  • ​ бережет вашу работу​ ячейки с аргументами​:​ он был написан​​(Visual Basic Editor)​ условным форматированием.​ ​ быть полезны для​ которые не поддерживает​​Как правило, макросы сохраняются​
  • ​ приложений (VBA). Такими​ и при записи​(Формат с разделителями)​ от 0 до​​ товарооборот».​​ и F11. Далее​​ которая представлена выше.​ «Книга Excel с​ от лишних потерь​ (с суммой, для​​Любой выделенный в списке​ программистом. Такой способ​:​​Исходный VBA-код макроса​​ вас или других​ средство записи макросов.​ в расположении​ действиями может быть​ макроса. Когда всё​ на вкладке​ 100 с заголовками​​Используя введенные обозначения, получаем​ ​ записывается следующий код:​

    Макросы вȎxcel примеры​ В данном конкретном​

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

Макросы вȎxcel примеры

​ Так как средство​Эта книга​ ввод текста или​ будет готово, таблица​Home​ для столбцов и​ формулы для отклонений.​Sub program()​ случае код выглядит,​Затем необходимо перейти в​ ошибок. Далее рассмотрим,​ НДС) как в​ кнопкой​ требует знаний пользователя​ VBA и файлы​ списков на рабочем​ выполняться макрос. При​ записи макросов фиксирует​, но если вы​ чисел, выбор ячеек​ должна выглядеть так​

  • ​(Главная).​​ строк. Наша задача​ Если требуется осуществить​x= Cells(1, 1).Value (эта​ как:​ приложение VB, для​ как создать макрос,​​ случае с обычной​​Выполнить​ о программировании и​ справки не переводятся​ листе. Исходный код​ создании много макросы,​ почти каждый шаг,​ хотите, чтобы макрос​ или команд на​ же, как и​Далее, изменим внешний вид​
    Макросы вȎxcel примеры
  • ​ превратить этот набор​​ расчет в %​ команда присваивает x​Sub programm()​ чего достаточно воспользоваться​ который безошибочно и​ функцией:​(Run)​ VBA и позволяет​ компанией Microsoft на​ VBA-макроса для поиска​ описание помогут вам​ выполняемый во время​ был всегда доступен​
    Макросы вȎxcel примеры
  • ​ ленте или в​​ оригинал, который мы​ заголовков столбцов и​ данных в презентабельно​ имеем (F –​ значение содержимого ячейки​x1 = 1​ комбинацией клавиш «Alt»​​ автоматически выполнить рутинную​​Каждый пользователь сталкивался с​.​ пользоваться макросами как​ русский язык, поэтому​ ячеек с условным​ быстро определять, какие​ записи, может также​ при работе в​
    Макросы вȎxcel примеры

​ меню, форматирование ячеек,​ форматировали вручную, только​ строк:​

Макросы вȎxcel примеры

​ отформатированную таблицу и​ P) / P​ с координатами (1,​​x2 = 10​​ и «F11». Далее:​

  • ​ работу в один​ тем, что иногда​​Кнопка​​ неким аналогом видеозаписи:​ с английскими командами​ форматированием.​ макрос по исполнителям,​ потребоваться удалить ненужный​ Excel, выберите пункт​ строк или столбцов​
  • ​ с другими данными​Жирное начертание шрифта.​​ сформировать итоги в​​ * 100, а​
  • ​ 1))​​shag = 0.1​​в строке меню, расположенном​​ клик мышкой. Так​​ в Excel не​Параметры​ включил запись, выполнил​ в меню и​Макрос для выделения ячеек​ в противном случае​ код. Просмотр записанного​ Личная книга макросов.​ и даже импорт​ в ячейках.​Выравнивание по центру.​ каждой строке.​ в сумме —​If x>0 Then Cells(1,​i = 1​

​ в верхней части​ же рассмотрим в​ найти подходящих инструментов,​(Options)​ операци, перемотал пленку​ окнах придется смириться:​ Excel по условию​ может потребоваться угадать.​ кода — отличный​ Если выбрать этот​ данных из внешнего​Как уже не раз​Заливка цветом.​Как уже было сказано,​ (F – P).​ 1).Value = 1​Do While x1 <​ окна, нажимают на​ каких местах рабочей​

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

​ которые бы соответствовали​​позволяет посмотреть и​ и запустил выполнение​Макросы (т.е. наборы команд​ больше меньше.​Чтобы начать запись макроса,​ способ научиться программировать​ вариант, Excel создаст​ источника, такого как​ упоминалось, макрос —​И, наконец, настроим формат​ макрос – это​Результаты этих вычислений можно​If x=0 Then Cells(1,​ x2 (цикл будет​ иконку рядом с​ книги Excel можно​ потребностям. При всем​ отредактировать сочетание клавиш​ тех же действий​ на языке VBA)​2 исходных кода​ нажмите кнопку​ на VBA или​ скрытую личную книгу​ Microsoft Access. Visual​ это программный код​ итоговых значений.​ код, написанный на​ лучше всего сразу​ 1).Value = 0​ выполняться пока верно​ иконкой Excel;​ создавать и хранить​ изобилии возможностей Excel​ для быстрого запуска​

  • ​ еще раз. Естественно​ хранятся в программных​ макросов для выделения​ОК​ отточить свои навыки.​ макросов Personal.xlsb (если​ Basic для приложений​ на языке программирования​
  • ​Вот так это должно​ языке программирования VBA.​ внести в соответствующие​If x​ выражение x1 <​выбирают команду Mudule;​ макросы. Как их​ иногда нельзя автоматизировать​ макроса.​ у такого способа​ модулях. В любой​ ячеек по условию​
  • ​.​Пример изменения записанного кода​ она еще не​ (VBA) является частью​Visual Basic for Applications​ выглядеть в итоге:​ Но в Excel​ ячейки таблицы «Эксель».​End Sub.​ x2)​сохраняют, нажав на иконку​ запустить и выполнить,​ решения некоторых задач,​Кнопка​ есть свои плюсы​

​ книге Excel мы​

  • ​ больше равно или​Выполните действия, которые нужно​ можно найти в​​ существует) и сохранит​ языка программирования Visual​ ​(VBA). Когда Вы​Если Вас все устраивает,​
  • ​ Вы можете создать​Для итогов по факту​Остается запустить макрос и​​y=x1 + x1^2 +​​ с изображением floppy​​ а также как​

​ ведь совершенству нет​Изменить​ и минусы:​​ можем создать любое​​ меньше равно относительно​

Макросы вȎxcel примеры

  • ​ записать.​​ статье Начало работы​ макрос в ней.​ Basic. Он доступен​ включаете режим записи​ остановите запись макроса.​ программу, не написав​ и прогнозу получают​
  • ​ получить в «Эксель»​​ 3*x1^3 – Cos(x1)​ disk;​ их максимально оптимизировать​ предела. Идеальное решение​(Edit)​Макрорекордер записывает только те​ количество программных модулей​ их числовых значений.​​На вкладке​ с VBA в​ ​В поле​ в большинстве приложений​​ макроса, Excel фактически​Поздравляем! Вы только что​​ и строчки кода,​​ по формулам ItogP=ItogP​​ нужное значение для​​Cells(i, 1).Value = x1​
  • ​пишут, скажем так, набросок​​ под свои потребности.​ – это предоставление​открывает редактор Visual​ действия, которые выполняются​ и разместить там​Макрос для выборочного выделения​Разработчик​
    • ​ Excel.​​Описание​ Office. Хотя VBA​ записывает каждое сделанное​ самостоятельно записали свой​ что мы и​ + P и​ аргумента.​
    • ​ (значение x1 записывается​​ кода.​Excel предоставляет большой и​ возможности пользователю самому​ Basic (см. выше)​ в пределах окна​ наши макросы. Один​ ячеек на листе​щелкните​Перед записью макросов полезно​при необходимости введите​ позволяет автоматизировать процессы​
    • ​ Вами действие в​​ первый макрос в​ сделаем прямо сейчас.​ ItogF=ItogF+ F.​​Как вы уже могли​​ в ячейку с​Он выглядит следующим образом:​ изобильный арсенал инструментов​​ создавать свои специфические​​ и позволяет просмотреть​ Microsoft Excel. Как​ модуль может содержать​ Excel.​Остановить запись​ знать следующее:​

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

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

​ координатами (i,1))​Sub program ()​ для хранения и​ инструменты. Для этого​​ и отредактировать текст​​ только вы закрываете​​ любое количество макросов.​​Исходный код макроса​.​Макрос, записанный для работы​​ макроса.​ и между ними,​ ​ языке VBA. По-простому,​Чтобы использовать созданный макрос,​​View​

Макросы вȎxcel примеры

  • ​ (ItogF – ItogP)​ самом известном табличном​Cells(i, 2).Value = y​​’Наш код​ ​ обработки огромного количества​​ были созданы макросы.​
  • ​ макроса на VBA.​​ Excel или переключаетесь​ ​ Доступ ко всем​​ для автоматического выделения​На вкладке​ с диапазоном Excel,​Хотя поле «Описание» является​
  • ​ вам не нужно​​ Excel пишет программный​ ​ нам нужно сохранить​​(Вид) >​ / ItogP *​ процессоре Microsoft не​ (значение y записывается​End Sub​

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

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

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

​ код вместо Вас.​​ документ Excel в​ ​Macros​​ 100, если расчет​ так уж сложно.​​ в ячейку с​​Обратите внимание, что строка​​ Хотя для самой​​ на языке Visual​ клавиш для запуска​​ — запись останавливается.​ ​ помощью окна Project​​ заданному условию в​

Макросы вȎxcel примеры

​щелкните​ для ячеек этого​ заполнить. Кроме того,​ знать язык VBA,​Чтобы увидеть этот программный​ формате, который поддерживает​(Макросы) >​ ведется в процентах,​ Особенно, если научиться​

Макросы вȎxcel примеры

​ координатами (i,2))​ «’Наш код» будет​ универсальной аналитической программы​

​ Basic for Application​ макроса, лучше создать​Макрорекордер может записать только​ Explorer в левом​ критериях поиска значений.​Макросы​​ диапазона. Поэтому если​ желательно ввести понятное​ так как все​​ код, нужно в​

Макросы вȎxcel примеры

​ макросы. Для начала​Record Macro​​ а в случае​​ применять функции VBA.​i = i +​​ выделена другим цветом​​ Excel – хранение​ (VBA), а его​ кнопку и назначить​ те действия, для​

Макросы вȎxcel примеры

​ верхнем углу редактора​

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

  • ​(Запись макроса…)​ суммарной величины —​ Всего в этом​​ 1 (действует счетчик);​​ (зеленым). Причина в​​ данных само по​ выполняет инструмент приложения,​ ей нужный макрос.​ которых есть команды​
  • ​ (если его не​ несмежные диапазоны макросом?​ связанные с книгой.​​ диапазон новую строку,​​ полезно вам и​​ средство записи макросов.​​Macros​

​ данные из созданной​​Дайте своему макросу имя​

Макросы вȎxcel примеры

​ (ItogF – ItogP).​ языке программирования, созданном​x1 = x1 +​ апострофе, поставленном в​ себе менее интересно,​ к которому он​ Кнопка может быть​ меню или кнопки​

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

​ видно, нажмите CTRL+R).​Макрос для добавления строк​ При этом откроется​ макрос не будет​ всем, кто запускает​Важно знать, что при​(Макросы) на вкладке​ нами таблицы, т.е.​ (без пробелов) и​Результаты опять же сразу​ специально для написания​ shag (аргумент изменяется​ начале строки, который​ чем возможность их​ присоединен. Большинство этих​ нескольких типов:​ в Excel. Программист​ Программные модули бывают​ с заданной высотой​ диалоговое окно​

​ применяться к ней.​ макрос. Если у​ записи макроса регистрируются​View​ сделать из неё​ нажмите​ записываются в соответствующие​​ приложений в «Эксель»​​ на величину шага);​ обозначает, что далее​

Макросы вȎxcel примеры

​ обрабатывать, структурировать и​ инструментов не доступно​Кнопка на панели инструментов​​ же может написать​​ нескольких типов для​​ в таблицу Excel.​​Макрос​Если вам нужно записать​ вас много макросов,​​ почти все ваши​​(Вид) кликнуть​ пустой шаблон. Дело​ОК​ ячейки, поэтому нет​ и Word, около​​Loop​​ следует комментарий.​​ анализировать с презентацией​​ на уровне окна​

Макросы вȎxcel примеры

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

Макросы вȎxcel примеры

planetaexcel.ru

Как написать макрос в Excel на языке программирования VBA

​ действия. Поэтому если​View Macros​ в том, что​.​ необходимости их присваивания​ 160 функций. Их​End Sub.​Теперь вы можете написать​ в отчетах. Для​ программы Excel. Как​ и старше​ то, что Excel​Обычные модули​ написанию кода макроса​Примечание:​ советуем вместо этого​

Написание макросов в Excel

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

​Откройте меню​ никогда не умел​- используются в​ VBA для умной​ Макросы нельзя отменить. Прежде​

​ использовать несколько более​

  1. ​ они нужны.​ например нажмете не​ открывшемся диалоговом окне​ с этим шаблоном,​ ВСЕ Ваши действия​Перед запуском созданной программы,​Редактор макросов.
  2. ​ несколько больших групп.​ макроса в «Эксель»​ создать для себя​ сильнейший аналитических инструмент​Теперь продемонстрируем на примере​Сервис — Настройка​ (сортировку по цвету,​ большинстве случаев, когда​ вставки пустых строк​ чем впервые запускать​ мелких макросов.​Чтобы начать запись макроса,​ ту кнопку, средство​ нажать​ мы будем импортировать​ с документом записываются:​ требуется сохранить рабочую​ Это:​ получаем два столбца,​ новый инструмент в​ по обработке данных​ информацию о том,​(Tools — Customize)​Настройки.
  3. ​ например или что-то​ речь идет о​ между ячейками таблицы.​ записанный макрос, сохраните​В макросе могут содержаться​ нажмите кнопку​ записи макросов зарегистрирует​​Edit​
    ​ в него самые​ изменения ячеек, пролистывание​
    ​ книгу, например, под​Математические функции. Применив их​
    ​ в первом из​
    ​ VBA Excel (примеры​
    ​ такой как «Сводные​ как писать, редактировать​и перейдите на​ подобное).​
    ​ макросах. Для создания​
    Код.
  4. ​ Как автоматически вставить​ книгу или создайте​ и задачи, не​ОК​ это действие. В​(Изменить).​ свежие и актуальные​ таблицы, даже изменение​

Запуск.

​ названием «Отчет1.xls».​ к аргументу, получают​ которых записаны значения​ программ см. далее).​ таблицы». Но и​ и выполнять код​ вкладку​Если во время записи​ такого модуля выберите​ строки через одну​

​ ее копию, чтобы​

Возможности макросов в Excel

​ относящиеся к Excel.​.​ таком случае можно​Откроется окно​ данные.​ размера окна.​Клавишу «Создать отчетную таблицу»​ значение косинуса, натурального​ для x, а​ Конечно, тем, кто​ его можно еще​

​ макроса.​Команды (Commands)​ макроса макрорекордером вы​ в меню​

​ ячейку?​ предотвратить внесение нежелательных​ Процесс макроса может​Выполните действия, которые нужно​ снова записать всю​Visual Basic for Applications​Чтобы очистить все ячейки​Excel сигнализирует о том,​ требуется нажать всего​ логарифма, целой части​ во втором —​ знаком с азами​ более усовершенствовать с​Чтобы написать макрос:​. В категории​ ошиблись — ошибка​

​Insert — Module​Как сделать границы ячеек​ изменений. Если вас​ охватывать прочие приложения​ записать.​ последовательность или изменить​, в котором мы​ от данных, щёлкните​ что включен режим​ 1 раз после​ и пр.​ для y.​ Visual Basic, будет​ помощью макросов. И​Откройте рабочую книгу Excel,​Макросы​ будет записана. Однако​. В появившееся окно​ макросом в таблице​ не устраивают результаты​ Office и другие​На вкладке​

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

​ двух местах. Во-первых,​ Следует знать и​ наличию и используя​ график способом, стандартным​ даже те, кто​ таблиц не знают​ использовать макрос: «РАЗРАБОТЧИК»-«Код»-«Visual​ желтый «колобок» -​ на кнопку отмены​ можно вводить команды​Как автоматически рисовать​ можете закрыть книгу,​ Visual Basic для​в группе​ следует хорошо проработать​ Да, Вы правильно​Выделить все​ в меню​ другие правила. В​ программирование в Excel,​ для «Эксель».​ их не имеет,​ границ.​ Basic». Или нажмите​Настраиваемую кнопку​

exceltable.com

​ последнего действия (Undo)​

Содержание

  1. Способы записи макросов в Excel
  2. Создание макросов
  3. Создать макрос в Excel с помощью макрорекордера
  4. Написание макросов в Excel
  5. Настройка разрешения для использования макросов в Excel
  6. Вариант 1: Автоматическая запись макросов
  7. Запуск макроса
  8. Редактирование макроса
  9. Создание кнопки для запуска макросов в панели инструментов
  10. Создание графической кнопки на листе Excel
  11. Чтобы записать макрос, следует:
  12. Отображение вкладки “Разработчик” в ленте меню
  13. Абсолютная и относительная запись макроса
  14. Расширение файлов Excel, которые содержат макросы
  15. Что нельзя сделать с помощью макрорекодера?
  16. Редактор Visual Basic
  17. Запускаем выполнение макроса
  18. Корректируем макрос

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

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

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

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

Создать макрос в Excel с помощью макрорекордера

Для начала проясним, что собой представляет макрорекордер и при чём тут макрос.

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

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

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

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

  • в версии Excel от 2007 и к более новым вам нужно на вкладке «Разработчик» нажать кнопочку «Запись макроса»
  • в версиях Excel от 2003 и к более старым (они еще очень часто используются) вам нужно в меню «Сервис» выбрать пункт «Макрос» и нажать кнопку «Начать запись».

Следующим шагом в работе с макрорекордером станет настройка его параметров для дальнейшей записи макроса, это можно произвести в окне «Запись макроса», где:

  • поле «Имя макроса» — можете прописать понятное вам имя на любом языке, но должно начинаться с буквы и не содержать в себе знаком препинания и пробелы;
  • поле «Сочетание клавиш» — будет вами использоваться, в дальнейшем, для быстрого старта вашего макроса. В случае, когда вам нужно будет прописать новое сочетание горячих клавиш, то эта возможность будет доступна в меню «Сервис» — «Макрос» — «Макросы» — «Выполнить» или же на вкладке «Разработчик» нажав кнопочку «Макросы»
  • поле «Сохранить в…» — вы можете задать то место, куда будет сохранен (но не послан) текст макроса, а это 3 варианта:
    • «Эта книга» — макрос будет записан в модуль текущей книги и сможет быть выполнен только в случае, когда данная книга Excel будет открыта;
    • «Новая книга» — макрос будет сохранен в тот шаблон, на основе которого в Excel создается пустая новая книга, а это значит, что макрос станет доступен во всех книгах, которые будут создаваться на этом компьютере с этого момента;
    • «Личная книга макросов» — является специальной книгой макросов Excel, которая называется «Personal.xls» и используется как специальное хранилище-библиотека макросов. При старте макросы из книги «Personal.xls» загружаются в память и могут быть запущены в любой книге в любой момент.

  • поле «Описание» — здесь вы можете описать, что и как должен делать макрос, для чего он создавался и какие функции несет, это чисто информативное поле, что называется на память.

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

Написание макросов в Excel

Код макроса Excel написанный на языке Visual Basic for Application (VBA), а его выполняет инструмент приложения, к которому он присоединен. Большинство этих инструментов не доступно на уровне окна программы Excel. Как написать макрос.

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

Чтобы написать макрос:

  1. Откройте рабочую книгу Excel, в которой необходимо использовать макрос: «РАЗРАБОТЧИК»-«Код»-«Visual Basic». Или нажмите комбинацию горячих клавиш ALT+F11.
  2. Перед началом работы в редакторе следует сделать простую настройку. Выберите инструмент в редакторе Visual Basic: «Tools»-«Options». И на вкладке «Editor» активируйте опцию «Require Variable Declaration». Это позволит реализовать автоматическое заполнение инструкций Options Explicit в начале каждого ново созданного кода. А в поле ввода «Tab Width:» укажите значение 2 вместо 4-х. Это позволит уменьшить ширину кода. Данная настройка редактора распространяется на все листы, но в границах одной рабочей книги.
  3. Выберите инструмент: «Insert»-«Module» чтобы создать новый стандартный модуль для макросов. В появившемся окне модуля под текстом Option Explicit введите следующий код макроса:
  4. SubMyMakros()
    DimpolzovatelAs String
    Dimdata_segodnyaAs Date
    polzovatel = Application.UserName
    data_segodnya = Now
    MsgBox"Макрос запустил пользователь: "& polzovatel & vbNewLine & data_segodnya
    End Sub

  5. Нажмите на кнопку в редакторе «Run Macro» или клавишу F5 на клавиатуре. В появившемся окне «Macros» нажмите на кнопку «Run», чтобы посмотреть результат работы макроса.

Примечание. Если в главном меню отсутствует закладка «РАЗРАБОТЧИК», тогда ее необходимо активировать в настройках: «ФАЙЛ»-«Параметры»-«Настроить ленту». В правом списке «Основные вкладки:» активируйте галочкой опцию «Разработчик» и нажмите на кнопку ОК.

Настройка разрешения для использования макросов в Excel

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

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

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

Подробнее: Включение и отключение макросов в Microsoft Excel

Когда все готово, приступаем к записи.

  1. Перейдите на вкладку «Разработчик». Кликните по кнопке «Запись макроса», которая расположена на ленте в блоке инструментов «Код».
  2. Открывается окно настройки записи макроса. Тут можно указать любое имя для него, если установленное по умолчанию вас не устраивает. Главное, чтобы имя это начиналось с буквы, а не с цифры, а также в названии не должно быть пробелов. Мы оставили название по умолчанию – «Макрос1».
  3. Тут же при желании можно установить сочетание клавиш, при нажатии на которые макрос будет запускаться. Первой клавишей обязательно должна быть Ctrl, а вторую пользователь устанавливает самостоятельно. Мы в качестве примера установили клавишу М.
  4. Далее следует определить, где будет храниться макрос. По умолчанию он расположен в этой же книге (файле), но при желании можно установить хранение в новой книге или в отдельной книге макросов. Мы оставим значение по умолчанию.
  5. В самом нижнем поле можно оставить любое подходящее по контексту описание макроса, но это делать не обязательно. Когда все настройки выполнены, жмем на кнопку «OK».
  6. После этого все ваши действия в данной книге (файле) Excel будут записываться в макрос до тех пор, пока вы сами не остановите запись.
  7. Для примера запишем простейшее арифметическое действие: сложение содержимого трех ячеек (=C4+C5+C6).
  8. Когда алгоритм был выполнен, щелкаем на кнопку «Остановить запись». Эта кнопка преобразовалась из кнопки «Запись макроса» после включения записи.

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

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

  1. Кликаем в том же блоке инструментов «Код» по кнопке «Макросы» или жмем сочетание клавиш Alt + F8.
  2. После этого открывается окно со списком записанных макросов. Ищем макрос, который мы записали, выделяем его и кликаем на кнопку «Выполнить».
  3. Можно поступить еще проще и не вызывать даже окно выбора макросов, так как на первом этапе мы задали сочетание клавиш для быстрого вызова макроса. В нашем случае это Ctrl + М. Жмем данную комбинацию на клавиатуре, после чего он запускается.
  4. Как видим, он выполнил в точности все те действия, которые были записаны ранее.

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

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

  1. Снова щелкаем на кнопку «Макросы». В открывшемся окне выбираем нужный и кликаем по кнопке «Изменить».
  2. Открывается «Microsoft Visual Basic» (VBE) – среда, где происходит их редактирование.
  3. Запись каждого макроса начинается с команды Sub, а заканчивается командой End Sub. Сразу же после Sub указывается имя макроса. Оператор Range("…").Select указывает выбор ячейки. Например, при команде «Range(«C4»).Select» выбирается ячейка «C4». Оператор ActiveCell.FormulaR1C1 используется для записи действий в формулах и других расчетов.
  4. Попытаемся немного изменить макрос, дописав выражение:

    Range("C3").Select
    ActiveCell.FormulaR1C1 = "11"

  5. Выражение 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".
  6. Закрываем редактор и запускаем макрос. Как видим, вследствие введенных нами изменений была добавлена дополнительная ячейка с данными. Она также была включена в расчет общей суммы.
  7. В случае если макрос слишком большой, его выполнение может занять значительное время, но внесением ручного изменения в код мы можем ускорить процесс. Добавляем команду Application.ScreenUpdating = False. Она позволит сохранить вычислительные мощности, а значит, ускорить работу. Это достигается путем отказа от обновления экрана во время выполнения вычислительных действий. Чтобы возобновить обновление после выполнения макроса, в его конце пишем команду Application.ScreenUpdating = True.
  8. Добавим также команду Application.Calculation = xlCalculationManual в начало кода, а в его конец дописываем Application.Calculation = xlCalculationAutomatic. Этим мы сначала отключаем автоматический пересчет результата после каждого изменения ячеек, а в конце макроса – включаем. Таким образом, Excel подсчитает результат только один раз, а не будет его постоянно пересчитывать, чем сэкономит время.

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

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

  1. Кнопка в панели инструментов в MS Excel 2003 и более старше. Вам нужно в меню «Сервис» в пункте «Настройки» перейти на доступную вкладку «Команды» и в окне «Категории» выбрать команду «Настраиваемая кнопка» обозначена жёлтым колобком или смайликом, кому как понятней или удобней. Вытащите эту кнопку на свою панель задач и, нажав правую кнопку мыши по кнопке, вызовите ее контекстное меню, в котором вы сможете отредактировать под свои задачи кнопку, указав для нее новую иконку, имя и назначив нужный макрос.
  2. Кнопка в панели вашего быстрого доступа в MS Excel 2007 и более новее. Вам нужно клацнуть правой кнопкой мышки на панели быстрого доступа, которое находится в верхнем левом углу окна MS Excel и в открывшемся контекстном меню выбираете пункт «Настройка панели быстрого доступа». В диалоговом окне настройки вы выбираете категорию «Макросы» и с помощью кнопки «Добавить» вы переносите выбранный со списка макрос в другую половинку окна для дальнейшего закрепления этой команды на вашей панели быстрого доступа.

Создание графической кнопки на листе Excel

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

  • В MS Excel 2003 и более старше переходите в меню «Вид», выбираете «Панель инструментов» и нажимаете кнопку «Формы».
  • В MS Excel 2007 и более новее вам нужно на вкладке «Разработчик» открыть выпадающее меню «Вставить» и выбрать объект «Кнопка».

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

Чтобы записать макрос, следует:

  1. Войти во вкладку «разработчик».
  2. Выбрать запись макроса.
  3. Выбрать имя макроса (в имени нельзя использовать пробелы и дефисы);
  4. Можно выбрать сочетание клавиш, при нажатии которых будет начинаться запись макроса;
  5. Выбрать место сохранения:

— при сохранении в «Эта книга» макрос будет работать только в текущем документе;

— при сохранении в «Личная книга» макрос будет работать во всех документах на Вашем компьютере.

  1. Можно добавить описание макроса, оно поможет Вам вспомнить, какие действия совершает макрос.
  2. Нажать «Ок».
  3. Если вы не указали сочетание клавиш, запись начнется сразу после нажатия кнопки «Ок».
  4. Когда идет запись, Вы должны совершать требуемую последовательность действий.
  5. Когда закончите, нажимайте кнопку остановить запись.

Записанные макросы отображаются в книге макросов.

Чтобы их посмотреть следует нажать кнопку «макросы». В появившемся окне появится список макросов. Выберете нужный макрос и нажмите «Выполнить».

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

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

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

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

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

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

Вы уже знаете про абсолютные и относительные ссылки в 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»). Это один из тех случаев, когда макрорекодер добавляет ненужный код, который не имеет никакой цели и может быть удален. Без него код будет работать отлично.

Расширение файлов Excel, которые содержат макросы

Когда вы записываете макрос или вручную записываете код VBA в Excel, вам необходимо сохранить файл с расширением файла с поддержкой макросов (.xlsm).

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

Если вы выберете “Нет”, Excel сохранить файл в формате с поддержкой макросов. Но если вы нажмете “Да”, Excel автоматически удалит весь код из вашей книги и сохранит файл как книгу в формате .xlsx. Поэтому, если в вашей книге есть макрос, вам нужно сохранить его в формате .xlsm, чтобы сохранить этот макрос.

Что нельзя сделать с помощью макрорекодера?

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

  • Вы не можете выполнить код без выбора объекта. Например, если вы хотите, чтобы макрос перешел на следующий рабочий лист и выделил все заполненные ячейки в столбце A, не выходя из текущей рабочей таблицы, макрорекодер не сможет этого сделать. В таких случаях вам нужно вручную редактировать код.
  • Вы не можете создать пользовательскую функцию с помощью макрорекордера. С помощью VBA вы можете создавать пользовательские функции, которые можно использовать на рабочем листе в качестве обычных функций.
  • Вы не можете создавать циклы с помощью макрорекордера. Но можете записать одно действие, а цикл добавить вручную в редакторе кода.
  • Вы не можете анализировать условия: вы можете проверить условия в коде с помощью макрорекордера. Если вы пишете код VBA вручную, вы можете использовать операторы IF Then Else для анализа условия и запуска кода, если true (или другой код, если false).

Редактор Visual Basic

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

Запускаем выполнение макроса

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

  1. В той же вкладке (“Разработчик”) и группе “Код” нажимаем кнопку “Макросы” (также можно воспользоваться горячими клавишами Alt+F8).
  2. В отобразившемся окошке выбираем наш макрос и жмем по команде “Выполнить”.Примечание: Есть более простой вариант запустить выполнение макроса – воспользоваться сочетанием клавиш, которое мы задали при создании макроса.
  3. Результатом проверки будет повторение ранее выполненных (записанных) действий.

Корректируем макрос

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

  1. Нажимаем кнопку “Макросы” (или комбинацию Ctrl+F8).
  2. В появившемся окошке выбираем наш макрос и щелкаем “Изменить”.
  3. На экране отобразится окно редактора “Microsoft Visual Basic”, в котором мы можем внести правки. Структура каждого макроса следующая:
    • открывается с команды “Sub”, закрывается – “End Sub”;
    • после “Sub” отображается имя макроса;
    • далее указано описание (если оно есть) и назначенная комбинация клавиш;
    • команда “Range(“…”).Select” возвращает номер ячейки. К примеру, “Range(“B2″).Select” отбирает ячейку B2.
    • В строке “ActiveCell.FormulaR1C1” указывается значение ячейки или действие в формуле.
  4. Давайте попробуем скорректировать макрос, а именно, добавить в него ячейку B4 со значением 3. В код макроса нужно добавить следующие строки:
    Range("B4").Select
    ActiveCell.FormulaR1C1 = "3"
  5. Для результирующей ячейки D2, соответственно, тоже нужно изменить начальное выражение на следующее:
    ActiveCell.FormulaR1C1 = "=RC[-2]*R[1]C[-2]*R[2]C[-2]".Примечание: Обратите внимание, что адреса ячеек в данной строке (ActiveCell.FormulaR1C1) пишутся в стиле R1C1.
  6. Когда все готово, редактор можно закрывать (просто щелкаем на крестик в правом верхнем углу окна).
  7. Запускаем выполнение измененного макроса, после чего можем заметить, что в таблице появилась новая заполненная ячейка (B4 со значением “3”), а также, пересчитан результат с учетом измененной формулы.
  8. Если мы имеем дело с большим макросом, на выполнение которого может потребоваться немало времени, ручное редактирование изменений поможет быстрее справиться с задачей.
    • Добавив в конце команду Application.ScreenUpdating = False мы можем ускорить работу, так как во время выполнения макроса, изменения на экране отображаться не будут.
    • Если потребуется снова вернуть отображение на экране, пишем команду: Application.ScreenUpdating = True.
  9. Чтобы не нагружать программу пересчетом после каждого внесенного изменения, в самом начале пишем команду Application.Calculation = xlCalculationManual, а в конце – Application.Calculation = xlCalculationAutomatic. Теперь вычисление будет выполняться только один раз.

Источники

  • https://lumpics.ru/how-to-create-a-macro-in-excel/
  • https://MicroExcel.ru/sozdanie-makrosov/
  • http://topexcel.ru/kak-sozdat-makros-v-excel/
  • https://exceltable.com/vba-macros/kak-napisat-makros
  • https://office-guru.ru/excel/samouchitel-po-rabote-s-makrosami-v-excel-449.html
  • http://RuExcel.ru/simple-macros/
  • https://micro-solution.ru/excel/vba/first-macros

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

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

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

Моя история

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

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

Представьте на минуту, что всю вашу рутину:

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

можно поручить Excel. ОДИН РАЗ прописать логику с помощью VBA и всё! Да, я знаю, что написание макроса иногда может занять неделю, а то и месяц. Но сколько вы каждый день/неделю/месяц тратите время на ерунду?

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

Про сборник

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

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

Если вы считаете, что что-то должно быть в списке, просто оставьте комментарий. Как только добавлю код — удалю комментарий, а про вас напишу в статье.

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

Вы сможете использовать эти коды, даже если до этого не использовали VBA.

Работа с Excel файлами (WorkBook)

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

Назад к списку тем


Работа с листами Excel файла (WorkSheets)

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

Назад к списку тем


Работа с диапазонами (Range)

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

  • Как выбрать и изменить форматирование диапазона
  • Как создать и выбрать именованный диапазон
  • Как сделать перебор диапазона ячеек
  • Как выбрать и форматировать диапазон
  • Как вставить пустые строки в диапазон
  • Как отобразить все скрытые строки и столбцы
  • Как удалить пустые строки
  • Как удалить пустые столбцы
  • Как отобрать и отформатировать все формулы на листе
  • Как найти первую пустую строку или столбец
  • Как применить дополнительный цвет заливки
  • Как отсортировать диапазоны по двойному щелчку
  • Как ограничить диапазон прокрутки в той или иной области
  • Как автоматически задать область печати листа

Назад к списку тем


Макросы для работы с данными

Эта часть посвящена управлению данными: их очистке, форматированию и т. д.

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

Назад к списку тем


Макросы для сводных таблиц

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

Назад к списку тем


Макросы для графиков

  • Как изменить размер диаграмм на рабочем листе
  • Как привязать график к определенному диапазону
  • Как создать набора бессвязных диаграмм
  • Как распечатать всех диаграммы на рабочем листе
  • Как отметить первое и последнее значение на графике
  • Как сопоставить цвет диаграммы и исходных данных
  • Как сопоставить цвет точек графика и исходных данных

Назад к списку тем


Макросы для отправки писем из Excel

  • Как отправить Excel файл почтой (как вложение)
  • Как отправить диапазон значений в качестве вложения
  • Как отправить один листа файла в качестве вложения
  • Как отправить письмо со ссылкой на наши файлы
  • Как разослать письма с добавлением адресов в наш список контактов
  • Как сохранить все вложения в отдельной папке
  • Как сохранить определенные вложения в папку

Назад к списку тем


Макросы для работы с Access

  • Как выполнить запрос Access из Excel
  • Как запустить макрос Access из Excel
  • Как открыть отчет Access из Excel
  • Как открыть форму Access из Excel
  • Как сжать базу данных Access из Excel

Назад к списку тем


Макросы для работы с MS Word

  • Как отправить данные из Excel в Word документ
  • Как сделать слияние с Word документом

Назад к списку тем


Макросы для работы с PowerPoint

  • Как отправить данные Excel в PowerPoint
  • Как отправить график из Excel в PowerPoint
  • Как преобразовать рабочую книгу в презентацию PowerPoint

Назад к списку тем


Уже добавили страницу в закладки? Зря, я же пополняю список)

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