Создание кода VBA: ИИ-нейросеть для написания макроса онлайн

Создание кода VBA — ИИ-помощник онлайн нейросети Аливия. Напишет макрос для Excel, Word или Outlook по описанию обычными словами: свод из десятков файлов, выгрузка в PDF, подсветка дублей и пустых полей, форма ввода с кнопками. Пришлите свой макрос — объяснит ошибку Run-time, ускорит медленный цикл и добавит построчные комментарии, чтобы код можно было править самому.

Работает онлайнРусский и другие языкиТест бесплатно, без регистрацииБез VPNДоступ 24/7Голосовой ввод и файлы

АливияИИ-ассистент20 000 символов бесплатно20 000 символов доступны сразу — без карты и без регистрации.
Зарегистрируйтесь и подтвердите почту — начислим ещё 30 000 символов на 30 дней.Зарегистрироваться
Онлайн
Примеры запросов — нажмите, и текст подставится в чат:

Программистам · ИИ-инструмент нейросети Аливия

Конструктор макросов VBA

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

Что делаем
Программа
Формат ответа
Ещё настройкикак запускать, обработка ошибок, ускорение, копия перед запуском, option explicit
Обработка ошибок
Ускорение
Копия перед запуском
Option Explicit
Ваш запрос

Запрос подставится в поле чата — его можно поправить перед отправкой.

Что автоматизируют на VBA чаще всего

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

ЗадачаЧто просить у инструмента
Свести данные из нескольких файлов«Собери листы из всех книг в папке в одну таблицу»
Привести выгрузку в порядок«Убери пустые строки, приведи даты к одному формату»
Сформировать документы по шаблону«Сделай письма по списку получателей в Word»
Регулярный отчёт«Построй сводную и выгрузи в PDF по кнопке»
Проверка данных«Подсвети строки, где значения не сходятся»

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

Макросы для Excel

Самая частая задача — обработка таблиц: фильтрация и перенос строк по условию, сведение данных с нескольких листов, удаление дублей, расстановка формул, форматирование по правилам, построение диаграмм. Аливия возвращает готовую процедуру Sub с комментариями и подсказывает, куда её вставить: в модуль книги, листа или личную книгу макросов.

Работа с файлами и папками

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

Формы и пользовательский интерфейс

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

Word, Outlook, Access и PowerPoint

VBA работает во всём пакете Office. Через чат можно получить макрос для сборки договора по шаблону в Word, для рассылки писем с вложениями в Outlook, для запросов к таблицам Access или для генерации презентации из данных Excel.

Отладка и ускорение

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

Бухгалтерам и финансистам

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

Аналитикам и менеджерам

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

Тем, кто только осваивает VBA

Генератор работает и как учебник: код возвращается с комментариями, а на любой непонятный фрагмент можно попросить объяснение простыми словами. Рядом пригодятся генератор таблиц и генератор кода на Python, если задача перерастёт возможности Office.

Ограничения, о которых честно стоит знать

Нейросеть не видит ваш файл: она пишет код по описанию, поэтому имена листов, столбцов и диапазонов нужно указывать точно. Сложные проекты с десятками модулей лучше разбирать по частям. И главное — любой макрос, который удаляет или перезаписывает данные, сначала запускайте на копии книги: отменить выполнение макроса через Ctrl+Z нельзя.

Особенности VBA, о которых стоит помнить

VBA живёт внутри офисных приложений, и его ограничения задаёт не язык, а среда. Это влияет и на код, и на то, как его запускать.

  • Файл с макросами. Книга должна быть сохранена как .xlsm — в обычном .xlsx макросы не сохраняются.
  • Безопасность макросов. По умолчанию выполнение отключено; файл из интернета Excel открывает в защищённом режиме, и его нужно разблокировать в свойствах.
  • Ссылки на библиотеки. Для работы с Word, Outlook или регулярными выражениями нужно подключить библиотеку через Tools → References или использовать позднее связывание.
  • Скорость. Обращение к ячейкам поштучно медленно: выгружайте диапазон в массив, считайте в памяти и записывайте обратно одним действием.
  • Отмена действий. После макроса стек отмены очищается — предупреждайте пользователей и делайте копию листа перед изменениями.

Готовая формула запроса: «Excel 2019, VBA. Нужен макрос: на листе «Данные» пройти строки со 2-й до последней заполненной, собрать значения столбцов A, C и F, записать сводку на лист «Отчёт». Используй массивы вместо поячеечного доступа, добавь Option Explicit, обработку ошибок и отключение обновления экрана».

Как описать задачу, чтобы макрос заработал с первого раза?

  1. Опишите структуру листа. Какие столбцы, с какой строки начинаются данные, есть ли заголовки и объединённые ячейки.
  2. Приложите пример строки. Форматы дат и чисел в Excel — источник половины ошибок.
  3. Скажите, что делать с исключениями. Пустые ячейки, текст вместо числа, дубликаты.
  4. Назовите версию Excel. Часть функций и методов различается между версиями и между Windows и macOS.
  5. Просите комментарии. Макрос переживёт вас в компании: понятные комментарии сэкономят время следующему.

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

Что автоматизируют в Excel чаще всего

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

  • Сборка отчёта из нескольких листов или файлов. Однообразная работа, которая занимает часы вручную.
  • Приведение выгрузки к нужному виду. Удаление лишних столбцов, переименование заголовков, форматы дат и чисел.
  • Поиск расхождений. Сверка двух таблиц по ключу с подсветкой отличий.
  • Массовое создание документов. Печатные формы по шаблону для каждой строки таблицы.
  • Рассылка писем. Формирование писем из таблицы через Outlook.

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

Как отлаживать макрос VBA?

Редактор VBA даёт полноценную отладку — этим стоит пользоваться, а не искать ошибку глазами.

  • Пошаговое выполнение. Клавиша F8 выполняет код по строке — видно, где значение стало не тем.
  • Окно Immediate. Debug.Print выводит промежуточные значения без всплывающих окон.
  • Точки останова. Ставьте их перед подозрительным участком, а не в начале процедуры.
  • Option Explicit. Обязательная строка в начале модуля: она ловит опечатки в именах переменных.
  • Обработка ошибок. On Error GoTo с понятным сообщением вместо молчаливого сбоя.

Готовая формула запроса: «Макрос падает на строке с циклом по диапазону, ошибка 1004. Вот код. Объясни причину, предложи исправление и добавь обработку ошибок с понятным сообщением для пользователя».

Когда макрос лучше заменить формулами

  • Разовая задача. Если операция нужна один раз, формулы и Power Query быстрее.
  • Файл уходит наружу. У получателя макросы могут быть отключены политикой безопасности.
  • Данные обновляются регулярно. Power Query перестраивает отчёт по кнопке без кода.
  • Задача — расчёт, а не действие. Формулы нагляднее и не требуют доверия к макросу.
  • Некому поддерживать. Макрос без автора в компании живёт ровно до первой ошибки.

Прежде чем писать код, спросите прямо: «решается ли эта задача формулами или Power Query» — иногда ответ экономит целый день.

Цифры и факты

Что учесть при работе с макросами.

  • Microsoft по умолчанию блокирует макросы VBA в файлах, полученных из интернета, — файл нужно разблокировать в свойствах или хранить в доверенном расположении.
  • Код для Excel, Word и Access различается объектной моделью: приложение и версию Office стоит называть в запросе.
  • В VBA нет автоматической отмены действий: макрос, изменяющий данные, лучше сначала запускать на копии файла.
  • Списывается только ответ нейросети: ваш код и описание таблицы не тарифицируются.

Кейсы

Задачи, ради которых чаще всего открывают генератор макросов.

Реальные кейсы
Аливия Кирсанова
AI-эксперт в области искусственного интеллекта и нейросетей.
Кейс 1: Сводная таблица одним макросом
Тема: Excel: отчёты
Запрос: «Напиши макрос, который строит сводную по выгрузке на отдельном листе: продажи по менеджерам и месяцам»
Аливия Кирсанова
Результат: Sub BuildPivot()
    Dim wsData As Worksheet, wsPivot As Worksheet
    Dim cache As PivotCache, pivot As PivotTable
    Dim lastRow As Long, lastCol As Long

    Set wsData = ThisWorkbook.Worksheets("Данные")

    ' Границы ищем от последней ячейки вверх: End(xlDown) остановится
    ' на первой же пустой строке внутри таблицы
    lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row
    lastCol = wsData.Cells(1, wsData.Columns.Count).End(xlToLeft).Column

    If lastRow < 2 Then
        MsgBox "На листе «Данные» нет строк.", vbExclamation
        Exit Sub
    End If

    ' Старый лист удаляем без вопроса пользователю
    Application.DisplayAlerts = False
    On Error Resume Next
    ThisWorkbook.Worksheets("Сводная").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True

    Set wsPivot = ThisWorkbook.Worksheets.Add(After:=wsData)
    wsPivot.Name = "Сводная"

    Set cache = ThisWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=wsData.Range(wsData.Cells(1, 1), wsData.Cells(lastRow, lastCol)))

    Set pivot = cache.CreatePivotTable(TableDestination:=wsPivot.Range("A3"), _
                                       TableName:="СводнаяПродажи")

    With pivot
        .PivotFields("Менеджер").Orientation = xlRowField
        .PivotFields("Дата").Orientation = xlColumnField
        .AddDataField .PivotFields("Сумма"), "Выручка", xlSum
        .PivotFields("Выручка").NumberFormat = "# ##0 ₽"
        .RowAxisLayout xlTabularRow
    End With

    ' Группировка дат по месяцам и годам
    On Error Resume Next
    wsPivot.Range("B3").Group Start:=True, End:=True, Periods:= _
        Array(False, False, False, False, True, False, True)
    On Error GoTo 0

    wsPivot.Columns.AutoFit
    wsPivot.Activate

    MsgBox "Сводная построена: строк в источнике " & lastRow - 1, vbInformation
End Sub
Кейс 2: Перенос строк по условию на другой лист
Тема: Excel: обработка данных
Запрос: «Нужно перенести на лист «Архив» все строки, где в колонке «Статус» стоит «Закрыт», и удалить их из исходного»
Аливия Кирсанова
Результат: Sub MoveClosedRows()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRow As Long, targetRow As Long, i As Long
    Dim moved As Long
    Dim statusCol As Long
    Dim data As Variant
    Dim keep As Collection

    Set wsSource = ThisWorkbook.Worksheets("Заявки")
    Set wsTarget = ThisWorkbook.Worksheets("Архив")

    statusCol = Application.Match("Статус", wsSource.Rows(1), 0)
    If IsError(statusCol) Then
        MsgBox "Не нашёл колонку «Статус».", vbExclamation
        Exit Sub
    End If

    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
    targetRow = wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row + 1

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    ' Идём СНИЗУ ВВЕРХ: при удалении сверху строки смещаются
    ' и цикл по возрастанию пропускает каждую вторую подходящую
    For i = lastRow To 2 Step -1
        If StrComp(Trim(CStr(wsSource.Cells(i, statusCol).Value)), "Закрыт", vbTextCompare) = 0 Then
            wsSource.Rows(i).Copy
            wsTarget.Rows(targetRow).PasteSpecial xlPasteAll ' с форматом
            Application.CutCopyMode = False
            wsSource.Rows(i).Delete
            targetRow = targetRow + 1
            moved = moved + 1
        End If
    Next i

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    MsgBox "Перенесено строк: " & moved, vbInformation
End Sub
Кейс 3: Макрос работал 4 минуты — стал работать 3 секунды
Тема: Оптимизация
Запрос: «Вот мой макрос, он обрабатывает 20 000 строк и Excel зависает. Перепиши, чтобы работал быстро»
Аливия Кирсанова
Результат: ' ─── БЫЛО: обращение к листу на каждую ячейку ───
' For i = 2 To 20000
' Cells(i, 1).Select ' Select — самый дорогой вызов в VBA
' If Cells(i, 3).Value > 1000 Then
' Cells(i, 5).Value = Cells(i, 3).Value * 0.9
' End If
' Next i

' ─── СТАЛО: один обмен с листом на вход и один на выход ───
Sub ApplyDiscount()
    Dim ws As Worksheet
    Dim data As Variant, result As Variant
    Dim lastRow As Long, i As Long
    Dim calcMode As XlCalculation

    Set ws = ThisWorkbook.Worksheets("Продажи")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    If lastRow < 2 Then Exit Sub

    ' Состояние Excel запоминаем, чтобы вернуть даже при ошибке
    calcMode = Application.Calculation
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    On Error GoTo Finally

    ' Весь диапазон заезжает в массив одним действием
    data = ws.Range("C2:C" & lastRow).Value
    ReDim result(1 To UBound(data, 1), 1 To 1)

    For i = 1 To UBound(data, 1)
        If IsNumeric(data(i, 1)) Then
            If data(i, 1) > 1000 Then
                result(i, 1) = data(i, 1) * 0.9
            Else
                result(i, 1) = data(i, 1)
            End If
        End If
    Next i

    ' И выгружается обратно тоже одним
    ws.Range("E2:E" & lastRow).Value = result

Finally:
    Application.EnableEvents = True
    Application.Calculation = calcMode
    Application.ScreenUpdating = True

    If Err.Number <> 0 Then
        MsgBox "Ошибка " & Err.Number & ": " & Err.Description, vbCritical
    End If
End Sub

' Что дало ускорение:
' 1. Массив вместо обращения к ячейкам — каждое стоит около 0,1 мс,
' на 20 000 строк это минуты.
' 2. Отключённые пересчёт, отрисовка и события.
' 3. Ни одного Select и Activate: они вообще не нужны для работы с данными.
Кейс 4: Макрос для Word — замена по списку
Тема: Word
Запрос: «Нужен макрос для Word: заменить в документе термины по таблице соответствий из Excel и выделить замены цветом»
Аливия Кирсанова
Результат: Sub ReplaceTerms()
    Dim doc As Document
    Dim excel As Object, book As Object, sheet As Object
    Dim lastRow As Long, i As Long
    Dim replaced As Long
    Dim findText As String, newText As String

    Set doc = ActiveDocument

    ' Позднее связывание: не нужно подключать библиотеку Excel в References
    Set excel = CreateObject("Excel.Application")
    excel.Visible = False

    On Error GoTo Finally
    Set book = excel.Workbooks.Open("C:\Docs\terms.xlsx", ReadOnly:=True)
    Set sheet = book.Worksheets(1)

    lastRow = sheet.Cells(sheet.Rows.Count, 1).End(-4162).Row ' xlUp

    For i = 2 To lastRow
        findText = Trim(CStr(sheet.Cells(i, 1).Value))
        newText = Trim(CStr(sheet.Cells(i, 2).Value))
        If Len(findText) = 0 Then GoTo NextRow

        With doc.Content.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Replacement.Highlight = True ' подсветим, что заменили
            .Text = findText
            .Replacement.Text = newText
            .Forward = True
            .Wrap = wdFindContinue
            .MatchCase = False
            .MatchWholeWord = True ' «код» не тронет «кодекс»
            .MatchWildcards = False

            If .Execute(Replace:=wdReplaceAll) Then
                replaced = replaced + 1
            End If
        End With
NextRow:
    Next i

Finally:
    If Err.Number <> 0 Then MsgBox "Ошибка: " & Err.Description, vbCritical

    If Not book Is Nothing Then book.Close SaveChanges:=False
    If Not excel Is Nothing Then excel.Quit ' иначе Excel останется в памяти
    Set sheet = Nothing: Set book = Nothing: Set excel = Nothing

    MsgBox "Терминов заменено: " & replaced, vbInformation
End Sub
Кейс 5: Вместо русских букв в макросе кракозябры
Тема: Отладка
Запрос: «В коде было Range("Город"), а стало Range("Ãîðîä"). Файл открывается, но макрос не находит диапазон»
Аливия Кирсанова
Результат: ' Причина: файл с макросом или импортируемый CSV читается не в той кодировке.
' Редактор VBA хранит строки в кодировке системы, и текст, набранный
' в UTF-8, при импорте .bas превращается в «Ãîðîä».
'
' Лечится не переписыванием букв, а тремя приёмами:

' ─── 1. Не хранить русский текст в коде, брать его с листа ───
Sub UseNamedRange()
    Dim cityRange As Range
    Set cityRange = ThisWorkbook.Names("Город").RefersToRange
    ' Имя диапазона живёт в книге в правильной кодировке
    ' и не страдает при переносе модуля между машинами
End Sub

' ─── 2. Правильно открывать CSV: указывать кодировку явно ───
Sub OpenUtf8Csv(ByVal path As String)
    ' 65001 — UTF-8. Без этого Workbooks.Open читает файл
    ' в системной кодировке и портит кириллицу
    Workbooks.OpenText Filename:=path, _
        Origin:=65001, _
        DataType:=xlDelimited, _
        Semicolon:=True, _
        Local:=True ' даты и дробные по настройкам системы
End Sub

' ─── 3. Записывать текстовый файл в UTF-8 через ADODB ───
Sub SaveUtf8(ByVal path As String, ByVal content As String)
    Dim stream As Object
    Set stream = CreateObject("ADODB.Stream")

    stream.Type = 2 ' текстовый поток
    stream.Charset = "UTF-8"
    stream.Open
    stream.WriteText content
    stream.SaveToFile path, 2 ' перезаписать
    stream.Close

    ' Print # и Write # пишут в системной кодировке —
    ' в Блокноте и в Google Таблицах получится каша
End Sub

' Если модуль всё-таки пришёл битым: откройте .bas в редакторе
' с выбором кодировки (Notepad++, VS Code), переключите на Windows-1251,
' сохраните в UTF-8 — и импортируйте заново.

Опрос

Что вы автоматизируете макросами чаще всего?
Сводки и отчёты в Excel
100%
Обработку файлов и папок
0%
Документы в Word
0%
Письма в Outlook
0%

Создание кода VBA: частые вопросы

Нужно ли знать VBA, чтобы пользоваться генератором?
Нет. Достаточно описать задачу словами: какой файл, какие столбцы, что должно получиться. Аливия вернёт готовый макрос и построчно объяснит, что он делает. Знание VBA пригодится позже — когда захотите дорабатывать код под себя.

В какой версии Excel заработает сгенерированный код?
Код пишется под VBA7, который используется в Excel 2010 и новее, включая Microsoft 365. Если нужна совместимость со старыми версиями, укажите это в запросе — ИИ подберёт совместимые конструкции и объявления Declare.

Аливия умеет работать не только с Excel?
Да. VBA един для всего пакета Office, поэтому можно попросить макрос для Word (массовая замена, сборка документа по шаблону), Outlook (рассылка писем по списку), Access (запросы и формы) и PowerPoint (генерация слайдов из таблицы).

Почему макрос выдаёт ошибку 1004 или 424?
Чаще всего это обращение к листу или диапазону, которого нет в книге, либо к объекту, который не был назначен через Set. Вставьте текст ошибки и проблемный фрагмент в чат: ИИ покажет строку-виновника, объяснит причину и вернёт исправленный вариант.

Можно ли ускорить медленный макрос?
Да, это одна из частых задач. Аливия заменит построчные обращения к ячейкам на работу с массивами, отключит перерисовку экрана и пересчёт формул на время выполнения, уберёт лишние Select и Activate. На больших таблицах это обычно даёт ускорение в десятки раз.

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

Чем VBA лучше Python для автоматизации Office?
VBA встроен в Office и не требует установки: файл с макросом можно передать коллеге, и он заработает. Python мощнее для анализа данных и внешних интеграций, но требует окружения. Если сомневаетесь, опишите задачу в чате — Аливия подскажет, что уместнее.

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

Как сделать пользовательскую форму (UserForm) для ввода данных?
Аливия составит код формы с полями, проверкой заполнения и кнопкой записи в таблицу и объяснит, как добавить форму в редакторе VBA и вызвать её кнопкой на листе.

Как отладить макрос, который работает неправильно?
Вставьте код и опишите, что ожидали. Аливия найдёт ошибку: неверный диапазон, неявное преобразование типов, ссылку на активный лист вместо нужного — и покажет, как использовать точки останова и окно Immediate для проверки.

Итог

Генератор кода VBA собирает макросы под вашу структуру листа: с обработкой ошибок, комментариями и приёмами, которые не роняют скорость на больших таблицах. Опишите лист и приложите пример строки — и рабочий код придёт с первого ответа. Попробуйте бесплатно; при регулярной автоматизации посмотрите тарифы. Рядом: генератор таблиц, Python, SQL.

Автор и редактор страницы

Аливия Кирсанова

Основатель и руководитель сервиса «Аливия». Настраивает инструменты под задачи, подбирает модели и проверяет ответы по методике сайта.

  • В проекте с 2024 года
  • 350 инструментов настроено
Опубликовано: Обновлено:
Оцените материал