Добавить в корзинуПозвонить
Найти в Дзене
Макрос решает

Макросы в Excel: как использовать InputBox, циклы и отчёты без ошибок

Цель урока: Научиться использовать InputBox для динамического ввода данных, правильно внедрять цикл с условием, исключить ошибки преобразования типов и повысить гибкость ваших Excel-отчётов на VBA. На предыдущем этапе мы создали макрос, который: Однако, у этого кода есть одна серьёзная проблема: мы жёстко задали пороговое значение — 20000. Чтобы код стал универсальным и гибким, это значение должно вводиться пользователем вручную — при каждом запуске макроса. InputBox — это встроённая функция VBA, которая выводит диалоговое окно, предлагающее пользователю ввести значение. Это особенно полезно, когда: Пример: MyInput = InputBox("Введите порог продаж (например, 20000)", "Фильтр по продажам", 20000) Здесь: Это может привести к ошибкам при сравнении с числами, даже если пользователь ввёл число. If Cells(i, 4).Value > MyInput Then Если MyInput = "20000" (а это строка), то при сравнении с числом (например, 482) результат будет непредсказуемым, так как Excel сравнивает текст с числом, что всег
Оглавление

Цель урока: Научиться использовать InputBox для динамического ввода данных, правильно внедрять цикл с условием, исключить ошибки преобразования типов и повысить гибкость ваших Excel-отчётов на VBA.

🔧 Что мы уже умеем?

На предыдущем этапе мы создали макрос, который:

  • Использует цикл For для прохода по строкам отчёта;
  • Проверяет условия (например, сумма продаж > 20000);
  • Добавляет имена сотрудников, прошедших фильтр, в переменную MyMessage;
  • Показывает результат в виде MsgBox.

Однако, у этого кода есть одна серьёзная проблема: мы жёстко задали пороговое значение — 20000. Чтобы код стал универсальным и гибким, это значение должно вводиться пользователем вручную — при каждом запуске макроса.

🧠 Что такое InputBox и зачем он нужен?

InputBox — это встроённая функция VBA, которая выводит диалоговое окно, предлагающее пользователю ввести значение. Это особенно полезно, когда:

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

Пример:

MyInput = InputBox("Введите порог продаж (например, 20000)", "Фильтр по продажам", 20000)

Здесь:

  • "Введите порог продаж..." — это промт (текст инструкции);
  • "Фильтр по продажам" — заголовок окна;
  • 20000 — значение по умолчанию.

⚠️ Важный нюанс: InputBox всегда возвращает строку!

Это может привести к ошибкам при сравнении с числами, даже если пользователь ввёл число.

Пример проблемы:

If Cells(i, 4).Value > MyInput Then

Если MyInput = "20000" (а это строка), то при сравнении с числом (например, 482) результат будет непредсказуемым, так как Excel сравнивает текст с числом, что всегда приводит к логической путанице.

🛠 Как правильно преобразовать значение?

Самый простой способ — принудительно преобразовать строку в число, прибавив +0:

MyInput = InputBox(...) + 0

Теперь MyInput гарантированно будет числовой переменной, и условие начнёт работать корректно.

💡 Давайте объединим всё в рабочий код

Вот пример финального кода с пояснениями:

Sub MyFirstReport()
Dim MyInput As Double
Dim LastRow As Long
Dim i As Long
Dim MyMessage As String
' Получаем пороговое значение от пользователя
MyInput = InputBox("Введите порог продаж от 1 до 100000", "Фильтр по продажам", 20000) + 0
' Находим последнюю строку
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
' Обходим таблицу и формируем сообщение
For i = 2 To LastRow
If Cells(i, 4).Value > MyInput Then
MyMessage = MyMessage & Cells(i, 1).Value & ", " & Cells(i, 2).Value & vbCrLf
End If
Next i
' Показываем результат
MsgBox MyMessage, vbInformation, "Результаты отчёта"
End Sub

🧩 Объяснение по шагам

-2

📈 Пример результата работы макроса

Если вы введёте в поле InputBox значение 40000, и в таблице есть два сотрудника с продажами выше этой суммы, программа выведет:

Александр, специалист по работе с клиентами
Людмила, мастер дата-специалист

🔁 Что мы узнали и закрепили?

  1. InputBox делает макросы интерактивными и гибкими.
  2. Типы данных имеют значение. Строка ≠ число.
  3. Простое +0 спасает от ошибок сравнения.
  4. MsgBox отлично подходит для визуализации отчёта.
  5. Макросы могут быть дружелюбными к пользователю — даже без кнопок.

📌 Советы по улучшению

  • Хотите упростить запуск макроса? Добавьте кнопку на лист и свяжите её с макросом.
  • Используйте ввод нескольких параметров, если отчёт зависит от нескольких условий (например, даты и суммы).
  • Применяйте InputBox для тестирования фильтров до финальной автоматизации.

Подпишитесь на канал, чтобы не пропустить новые статьи.