Skip to content
Хронотехник
Menu
  • Главная
  • О Хронотехнике
  • Рассказы
  • Новости
  • Фотография
  • VBA
Menu
VBA

Функции и процедуры в VBA: зачем они нужны и в чём разница

Posted on 23.10.202523.10.2025 by admin

Если ты уже пробовал писать макросы в Excel на VBA, то наверняка встречал слова Sub и Function. Оба они вроде как запускают код — но ведут себя по-разному. И вот тут многие путаются: «А что использовать — Sub или Function?»

Разберёмся по-человечески, без занудства.

Рабочий стол
Рабочий стол

Содержание

Toggle
  • Процедура и функция
  • Немного философии из Excel-жизни
  • А можно свои функции вставлять прямо в Excel?
  • Главное правило, чтобы не путаться

Процедура и функция

Когда ты пишешь Sub, ты создаёшь процедуру — кусок кода, который что-то делает, но ничего не возвращает. Например, выделяет диапазон, форматирует таблицу, выводит сообщение на экран. Это как «повар, который готовит ужин, но не приносит его на стол» — делает работу, но не возвращает результат.

Sub Привет()
MsgBox «Привет, мир!»
End Sub

Вот классическая процедура: запускаешь — появляется окно с текстом. Всё. Результата, который можно «использовать» дальше, нет.

А вот Function — это уже функция. Она делает что-то похожее, но возвращает значение.

То есть она не просто выполняет действия, а выдаёт результат, который можно сохранить в переменную, вывести в ячейку, использовать в формулах Excel.

Пример простой, как утренний кофе:

Function Квадрат(число As Double) As Double
Квадрат = число * число
End Function

Теперь можно в Excel прямо в ячейке написать:

=Квадрат(5)

и получить 25.

Видишь разницу? Процедура — делает, функция — возвращает.

Функция в VBA
Функция в VBA

Немного философии из Excel-жизни

Если Sub — это исполнитель («сделай отчёт, напиши письмо»),

то Function — советчик («посчитай, сколько нужно»).

  • Sub хороша для действий: создать таблицу, скопировать, удалить, форматировать.
  • Function нужна для расчётов: посчитать процент, сумму, среднее, проверить условие.

Вот пример, где обе встречаются в одном файле — и работают вместе:

Function Скидка_1(сумма As Double) As Double
If сумма > 10000 Then
Скидка_1 = сумма * 0.1
Else
Скидка_1 = 0
End If
End Function

Sub ПоказатьСкидку_1()
Dim итог As Double
итог = Скидка_1(12000)
MsgBox «Размер скидки: » & итог
End Sub

Расчет скидки в Excel

Функция считает, процедура VBA показывает результат. Красиво и логично!

Функция считает, процедура VBA показывает результат. Красиво и логично!

А можно свои функции вставлять прямо в Excel?

Да! И в этом кайф VBA.

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

Например, создал Function СуммаВДолларах(рубли As Double), а потом пишешь в ячейке:

=СуммаВДолларах(A1)

и получаешь пересчитанное значение.

Главное правило, чтобы не путаться

  • Если тебе нужно что-то посчитать и вернуть результат, используй Function.
  • Если тебе нужно что-то сделать (отформатировать, показать, вставить) — пиши Sub.

И знаешь, что самое интересное? Когда начинаешь понимать эту разницу, VBA перестаёт казаться громоздким.

Он становится понятным инструментом, где всё подчинено здравому смыслу: одни модули работают, другие считают.

Факт напоследок:

Почти все современные языки программирования — от Python до JavaScript — тоже делятся на процедуры и функции. Просто называются они по-другому. А идея всё та же, что и в BASIC шестидесятых: делай что-то — или возвращай результат.

Первоначально опубликовано на моем канале в Дзене.