Нейросеть для макросов Excel: VBA-код по описанию задачи

Как сформулировать задачу для модели, чтобы получить рабочий макрос VBA, как проверить его на копии файла и что делать с ошибками Run-time error.

5 мин · · автоматизация · разработка

Нейросеть для написания макросов Excel экономит время там, где вы знаете, что хотите получить, но не помните синтаксис VBA. Модель пишет код по описанию, а вы запускаете его в редакторе Visual Basic. Главное условие успеха не в модели, а в формулировке задачи и в аккуратной проверке: макрос меняет данные, и отменить его действие обычной кнопкой «Отменить» нельзя. Ниже порядок работы, пример готового макроса, разбор типичных ошибок и вызов модели из скрипта.

Как описать задачу

Модель не видит вашу книгу, поэтому всё, что очевидно вам, нужно написать словами. В описании должны быть:

  1. Структура данных. Название листа, в какой строке заголовки, какие столбцы и что в них.
  2. Действие. Что сделать: удалить, посчитать, скопировать, раскрасить.
  3. Границы. С какой строки, до какой, по какому столбцу искать последнюю строку.
  4. Крайние случаи. Что делать с пустыми ячейками, текстом вместо чисел, пустым листом.
  5. Результат. Куда положить итог: на тот же лист, на новый, в сообщение.
  6. Версия и система. Excel для Windows или для Mac: часть объектов VBA на Mac недоступна.

Пример плохой постановки: «Удали лишнее». Хорошей: «Лист "Продажи", заголовки в строке 1, данные с A2. Удали полностью пустые строки (все ячейки пусты). Проходи снизу вверх. Макрос для Excel на Windows, используй Option Explicit и комментарии на русском».

Не отправляйте в запрос реальные данные: достаточно заголовков и двух-трёх вымышленных строк.

Пример результата

Вот макрос, который получается из приведённой выше постановки:

bash
Option Explicit

Sub DeleteEmptyRows()
    Dim ws As Worksheet
    Dim lastRow As Long, r As Long

    ' Лист с данными
    Set ws = ThisWorkbook.Worksheets("Продажи")
    ' Последняя строка по всему используемому диапазону
    lastRow = ws.UsedRange.Rows.Count + ws.UsedRange.Row - 1

    Application.ScreenUpdating = False
    ' Идём снизу вверх, чтобы сдвиг строк не сбивал счёт
    For r = lastRow To 2 Step -1
        If Application.WorksheetFunction.CountA(ws.Rows(r)) = 0 Then
            ws.Rows(r).Delete
        End If
    Next r
    Application.ScreenUpdating = True
End Sub

Обратите внимание на два решения, которые стоит проверять в любом макросе. Строки проходят снизу вверх: при удалении строки нижележащие сдвигаются вверх, и при проходе сверху вниз часть строк пропустилась бы. Последняя строка берётся из UsedRange, а не из столбца A: если бы мы искали последнюю заполненную ячейку в одном столбце, строки с данными только в других столбцах, лежащие ниже, остались бы необработанными. Это типичная скрытая ошибка в сгенерированном коде, поэтому спрашивайте у модели: «по какому столбцу ты определяешь последнюю строку и что будет, если он пуст?».

Как безопасно проверить макрос

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

  1. Работайте на копии файла. Сохраните книгу под другим именем и запускайте макрос на ней. Это главное правило.
  2. Прочитайте код до запуска. Особенно настораживают вызовы Kill, Shell, CreateObject, работа с сетью, Workbooks.Open по неожиданным путям. Если не понимаете строку, спросите модель, что она делает.
  3. Запустите по шагам. В редакторе VBA нажимайте F8 на небольшой тестовой книге и следите за значениями переменных.
  4. Проверьте крайние случаи. Пустой лист, одна строка данных, ячейки с формулами, скрытые строки, объединённые ячейки.
  5. Сохраняйте как .xlsm. В обычном .xlsx макросы не сохраняются.
  6. Не включайте макросы из чужих файлов. Это относится к чужим книгам, а не к коду, который вы сами прочитали.

Что делать с ошибками выполнения

Когда макрос падает, Excel показывает окно «Run-time error» с номером. Скопируйте номер, текст и строку, подсвеченную после нажатия Debug, и отправьте модели вместе с кодом. Частые случаи:

ОшибкаЧто обычно значит
Run-time error 9: Subscript out of rangeНет листа или книги с таким именем, проверьте название «Продажи»
Run-time error 13: Type mismatchВ ячейке текст там, где ожидалось число, или ошибка #Н/Д
Run-time error 1004Общая ошибка приложения: защищённый лист, неверный диапазон, объединённые ячейки
Run-time error 424: Object requiredПеременная не присвоена: забыт Set

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

Генерация макроса из скрипта

Если макросы нужны регулярно, постановку можно вынести в скрипт. Пример на Python с OpenAI SDK:

bash
from openai import OpenAI

client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_ваш_ключ")

task = """Лист "Продажи", заголовки в строке 1, данные с A2.
Столбцы: A дата, B менеджер, C сумма.
Нужен макрос Excel для Windows: на новом листе "Итоги" посчитать сумму по каждому менеджеру.
Используй Option Explicit, комментарии на русском, обработку пустого листа."""

resp = client.chat.completions.create(
    model="claude-sonnet-5-5",
    messages=[
        {"role": "system", "content": "Ты пишешь макросы VBA для Excel. Отвечай только кодом в блоке vba, без пояснений."},
        {"role": "user", "content": task},
    ],
    max_tokens=1500,
)
print(resp.choices[0].message.content)

Модель можно выбирать по вашим проверкам. Для коротких макросов обычно хватает недорогих вариантов, для сложных пробуйте сильнее; подход описан в статье какая модель лучше пишет код на Python, принцип тот же. Формат запроса к /v1/chat/completions описан в документации.

Сколько это стоит

Цены на 18 октября 2026. Пусть запрос на макрос занимает 500 токенов входа, ответ 1 000 токенов:

  • claude-sonnet-5-5 (0.4 / 2 за 1 млн): 0.0005 × 0.4 + 0.001 × 2 = 0.0002 + 0.002 = $0.0022
  • gpt-6.1-sol (0.27 / 1.32): 0.0005 × 0.27 + 0.001 × 1.32 = 0.000135 + 0.00132 ≈ $0.0015

Тысяча таких макросов обойдётся примерно в $2.2 и $1.5. Основная трата времени уходит на проверку, не на токены. Цены меняются, актуальный список: GET https://api.zukko.pro/v1/models.

Если вам нужны не макросы, а формулы, смотрите разбор нейросеть для формул Excel; для таблиц в браузере есть скрипты Google Sheets. Ключ создаётся в кабинете.

Частые вопросы

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

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

Нужно ли знать VBA, чтобы использовать нейросеть?

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

Что делать, если макрос работает на моём ПК, а у коллеги нет?

Скорее всего, дело в различиях версий или системы: объекты вроде Scripting.Dictionary недоступны в Excel для Mac. Укажите в запросе систему и версию Excel.

Работает ли это с Google Таблицами?

Нет, VBA относится к Excel. Для Google Таблиц используют Apps Script; модель можно попросить написать и его, указав это в задаче.

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.