ChatGPT для VBA: как написать и запустить макрос Excel

В этой статье

ChatGPT может написать VBA-код по описанию таблицы. Вставлять и запускать его нужно в настольном Excel для Windows. Начнём с небольшой сводки: на листе «Заказы» найдём оплаченные заказы, посчитаем их и сложим суммы. Результат запишем в отдельную новую книгу.

До запроса договоримся о данных. В новой копии исходной книги на листе «Заказы» диапазон A1:C4 должен выглядеть так:

Номер Сумма Статус
101 2400 Оплачен
102 900 Ожидает
103 1700 Оплачен

Заголовки стоят в строке 1: A — номер, B — сумма, C — статус. Значения в B2:B4 — числа. Статусы записаны точно: «Оплачен» и «Ожидает», без пробелов на конце. В колонке A ниже четвёртой строки других заказов пока нет.

Оплачены заказы 101 и 103: ожидаем 2 заказа и 2400 + 1700 = 4100. Эти числа станут проверкой макроса в вашей книге.

Такой короткий запрос можно начать в ChatGPT Free, если доступен лимит сообщений: платная подписка для него не обязательна. Если для дальнейшей работы с кодом вы выбираете личный Plus, сервис оплаты зарубежных сервисов Amber Market предлагает оформить месячный ChatGPT Plus на своём аккаунте через менеджера, с оплатой заказа через СБП. Нужен аккаунт Free без действующей подписки; продление оформляют после её окончания. Перед оплатой проверьте актуальные условия и итоговую стоимость. Подписка ChatGPT не включает лицензию Excel и не запускает VBA вместо настольного Excel.

Как задать ChatGPT задачу на VBA

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

Скопируйте запрос:

Напиши полный запускаемый макрос VBA для настольного Excel под Windows.
Назови процедуру Public Sub PaidOrdersSummary().

Код будет находиться в стандартном Module новой копии исходной книги .xlsm.
В этой книге есть лист «Заказы»:
A1 — Номер, B1 — Сумма, C1 — Статус.
Строка 2: 101 / 2400 / Оплачен.
Строка 3: 102 / 900 / Ожидает.
Строка 4: 103 / 1700 / Оплачен.
Значения в B — числа; статусы в C записаны без лишних пробелов.

Пройди строки от 2 до последней заполненной строки колонки A.
Учитывай строки, где C точно равна «Оплачен»: посчитай заказы и сложи суммы.
Если сумма пустая, содержит ошибку Excel или нечисловой текст, исключи
всю такую строку из количества и суммы. После подсчёта сообщи число
пропущенных строк. Не превращай ошибочную сумму в 0.

Источник подключи через ThisWorkbook.Worksheets("Заказы").
Последнюю строку определи так:
ws.Cells(ws.Rows.Count, "A").End(xlUp).Row.
Добавь Option Explicit, счётчики Long, сумму Currency или Double.

После подсчёта создай новую книгу через Workbooks.Add(xlWBATWorksheet).
Сохрани объект книги в переменную, явно обратись к её первому листу
и запиши два показателя: количество оплаченных заказов и их сумму.
Подбери ширину столбцов через AutoFit.
Все обращения к Range, Cells, Rows и Columns должны быть привязаны
к соответствующему листу.

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

Покажи цельный код для вставки в Module. Для этих данных ожидаются
2 оплаченных заказа и сумма 4100.

Как вставить макрос в свою книгу

Работайте с новой копией файла. Сохраните её в формате «Книга Excel с поддержкой макросов (*.xlsm)»: обычный .xlsx не сохраняет VBA-код.

  1. Откройте подготовленную копию .xlsm с листом «Заказы» и тремя строками из примера.
  2. Нажмите Alt+F11, чтобы открыть редактор Visual Basic.
  3. В окне Project выберите проект именно этой копии: ориентируйтесь на имя файла в скобках. Если окно скрыто, нажмите Ctrl+R.
  4. Выполните Insert → Module и вставьте код ниже в открывшийся стандартный модуль. Копируйте только код, без строк с тройными обратными кавычками.
  5. Вернитесь в Excel. Откройте Разработчик → Макросы (Developer → Macros), выберите PaidOrdersSummary из вашей копии и нажмите Выполнить (Run). Список макросов также открывается сочетанием Alt+F8.

Код размещается в стандартном Module, а не в модуле листа или ThisWorkbook. Порядок работы описан в справке Microsoft: запуск макроса и работа с модулем VBA в книге. Глобальное разрешение всех макросов для этого примера не требуется.

Option Explicit

Public Sub PaidOrdersSummary()
    Dim ws As Worksheet
    Dim wbResult As Workbook
    Dim wsResult As Worksheet
    Dim lastRow As Long
    Dim rowIndex As Long
    Dim paidCount As Long
    Dim paidTotal As Currency
    Dim badAmountCount As Long
    Dim amountValue As Variant

    Set ws = ThisWorkbook.Worksheets("Заказы")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For rowIndex = 2 To lastRow
        If ws.Cells(rowIndex, "C").Value = "Оплачен" Then
            amountValue = ws.Cells(rowIndex, "B").Value

            If IsError(amountValue) Then
                badAmountCount = badAmountCount + 1
            ElseIf Len(Trim$(CStr(amountValue))) = 0 Then
                badAmountCount = badAmountCount + 1
            ElseIf IsNumeric(amountValue) Then
                paidCount = paidCount + 1
                paidTotal = paidTotal + CCur(amountValue)
            Else
                badAmountCount = badAmountCount + 1
            End If
        End If
    Next rowIndex

    Set wbResult = Workbooks.Add(xlWBATWorksheet)
    Set wsResult = wbResult.Worksheets(1)

    wsResult.Cells(1, 1).Value = "Показатель"
    wsResult.Cells(1, 2).Value = "Значение"
    wsResult.Cells(2, 1).Value = "Оплаченных заказов"
    wsResult.Cells(2, 2).Value = paidCount
    wsResult.Cells(3, 1).Value = "Сумма оплаченных заказов"
    wsResult.Cells(3, 2).Value = paidTotal
    wsResult.Columns("A:B").AutoFit

    If badAmountCount > 0 Then
        MsgBox "Пропущено оплаченных строк: " & badAmountCount & _
               ". Проверьте суммы в колонке B исходного листа.", vbExclamation
    End If
End Sub

Здесь ThisWorkbook.Worksheets("Заказы") берёт источник из книги, в которой находится код. Workbooks.Add создаёт новую активную книгу. Если после этого написать просто Cells(2, 2), адрес уже будет зависеть от активного листа. В нашем коде источник закреплён за ws, книга результата — за wbResult, её первый лист — за wsResult. Различие между книгой с кодом и активной книгой описано в документации Microsoft по Workbook, создание книги — в описании Workbooks.Add.

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

Как проверить сводку

После запуска должна появиться новая несохранённая книга:

Показатель Значение
Оплаченных заказов 2
Сумма оплаченных заказов 4100

Переключитесь обратно в исходную копию. В A2:C4 должны остаться те же значения: 101 / 2400 / Оплачен, 102 / 900 / Ожидает, 103 / 1700 / Оплачен. Макрос только читает эти ячейки.

Для второй проверки измените C3 в копии: у заказа 102 поставьте «Оплачен» вместо «Ожидает». Запустите PaidOrdersSummary ещё раз. Теперь ожидаются 3 оплаченных заказа и 2400 + 900 + 1700 = 5000.

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

Если макрос не запускается

Если PaidOrdersSummary нет в списке макросов, проверьте объявление Public Sub PaidOrdersSummary() без аргументов и расположение кода в стандартном Module проекта вашей копии .xlsm. В списке Макросы из выберите эту книгу или все открытые книги.

Если ошибка Subscript out of range возникает на строке Set ws = ThisWorkbook.Worksheets("Заказы"), Excel не нашёл лист с таким именем в книге с кодом. Сначала проверьте, в проект какой книги вставлен модуль. Затем посмотрите точное название вкладки и при необходимости исправьте "Заказы" в коде. Переименовывать листы рабочей книги наугад не нужно.

В Excel для Интернета VBA-макросы нельзя создавать, редактировать или запускать. Этот пример требует настольного Excel для Windows.

Если задача решается вычислением в ячейке, пригодится инструкция, как получить формулу Excel с помощью ChatGPT. А для общения с ChatGPT непосредственно внутри таблицы есть отдельный сценарий — установка надстройки ChatGPT в Excel.

Источники

Есть следующая задача?Ещё по теме «Таблицы и анализ» →