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

> Источник: https://aliviy.io/vba/
> Обновлено: 2026-09-24
> Сервис: Аливия (aliviy.io) — онлайн ИИ-чат на русском языке.

Опишите задачу обычными словами — и получите готовый макрос для Excel, Word или Outlook с построчными комментариями. Аливия пишет код на VBA, находит причину ошибки в чужом макросе и ускоряет то, что работает медленно.

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

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

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

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

### Макросы для Excel

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

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

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

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

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

### Word, Outlook, Access и PowerPoint

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

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

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

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

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

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

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

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

Генератор работает и как учебник: код возвращается с комментариями, а на любой непонятный фрагмент можно попросить объяснение простыми словами. Рядом пригодятся [генератор таблиц](https://aliviy.io/table/) и [генератор кода на Python](https://aliviy.io/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 собирает макросы под вашу структуру листа: с обработкой ошибок, комментариями и приёмами, которые не роняют скорость на больших таблицах. Опишите лист и приложите пример строки — и рабочий код придёт с первого ответа. Попробуйте бесплатно; при регулярной автоматизации посмотрите [тарифы](https://aliviy.io/tarify/). Рядом: [генератор таблиц](https://aliviy.io/table/), [Python](https://aliviy.io/python/), [SQL](https://aliviy.io/sql/).
