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

Оператор With...End With в Excel VBA: как сократить код, сохранить нервы и повысить читаемость

Когда вы только начинаете программировать макросы в Excel, большинство примеров кода выглядят просто: строка за строкой вы явно указываете, что хотите изменить в конкретной ячейке или объекте. Но по мере роста вашего опыта и объёма задач, вы начнёте замечать: код становится всё длиннее, повторения множатся, а читабельность падает. И вот тогда на сцену выходит герой этой статьи — оператор With...End With. Этот инструмент позволяет не только сэкономить время, но и сделать код компактнее, структурированнее и понятнее. В этой статье вы узнаете: Конструкция With...End With позволяет работать с одним и тем же объектом (например, ячейкой, листом или шрифтом), не повторяя его имя каждый раз. Вот как выглядел бы код, если бы вы не использовали With: Range("D10").Value = "ExcelTip.ru" Range("D10").Font.Bold = True Range("D10").Font.Italic = True Выглядит несложно. Но теперь представьте, что вам нужно работать не с одним свойством, а с десятью, и при этом — не с одной ячейкой, а с целым листом, г
Оглавление

Когда вы только начинаете программировать макросы в Excel, большинство примеров кода выглядят просто: строка за строкой вы явно указываете, что хотите изменить в конкретной ячейке или объекте. Но по мере роста вашего опыта и объёма задач, вы начнёте замечать: код становится всё длиннее, повторения множатся, а читабельность падает. И вот тогда на сцену выходит герой этой статьи — оператор With...End With.

Этот инструмент позволяет не только сэкономить время, но и сделать код компактнее, структурированнее и понятнее. В этой статье вы узнаете:

  • Зачем нужен оператор With;
  • Как он работает;
  • Когда и где его применять;
  • И — самое важное — как он может спасти вас от рутины повторяющихся конструкций в коде VBA.

🧠 Что такое With...End With в VBA?

Конструкция With...End With позволяет работать с одним и тем же объектом (например, ячейкой, листом или шрифтом), не повторяя его имя каждый раз.

🔎 Без With

Вот как выглядел бы код, если бы вы не использовали With:

Range("D10").Value = "ExcelTip.ru"
Range("D10").Font.Bold = True
Range("D10").Font.Italic = True

Выглядит несложно. Но теперь представьте, что вам нужно работать не с одним свойством, а с десятью, и при этом — не с одной ячейкой, а с целым листом, графиком или элементом формы. Повторение имени объекта превращается в боль.

✅ С With

В этом же примере код с использованием With будет выглядеть так:

With Range("D10")
.Value = "ExcelTip.ru"
.Font.Bold = True
.Font.Italic = True
End With

Просто, изящно и — на 30% короче. А ещё:

  • Лучше читается;
  • Быстрее отлаживается;
  • Уменьшает шанс на ошибку (например, если вы меняете ссылку на ячейку — достаточно поменять её один раз).

🧪 Как это работает: разбор конструкции

Синтаксис очень простой:

With [объект]
.[свойство1] = значение
.[свойство2] = значение
...
End With

🔸 Объект указывается один раз.

🔸 Все обращения к его свойствам или методам начинаются с
точки (.).

🔸 Конструкция завершается End With.

Важно: точка в теле With указывает, что действие относится к объекту, объявленному в начале.

🎯 Когда стоит использовать With...End With?

-2

⚙️ Пример №1: Работа с одной ячейкой

With Range("B2")
.Value = "Добро пожаловать!"
.Font.Color = RGB(0, 102, 204)
.Font.Size = 14
.Interior.Color = RGB(230, 230, 250)
End With

Что делает код:

  • Устанавливает текст в ячейке B2;
  • Меняет цвет и размер шрифта;
  • Задаёт фоновый цвет ячейки.

⚙️ Пример №2: Работа с листом

With Sheets("Отчёт")
.Range("A1").Value = "Итог"
.Range("A1").Font.Bold = True
.Range("B1").Value = Date
.Visible = True
End With

Здесь оператор With относится ко всему листу, и мы используем его, чтобы обращаться к элементам на этом листе — компактно и без лишнего повторения.

⚠️ Вложенные конструкции

Иногда может понадобиться вложенный With:

With Range("A1")
.Value = "Тест"
With .Font
.Bold = True
.Size = 12
End With
End With

Хотя это возможно, не стоит увлекаться — вложенные With ухудшают читаемость кода. Используйте их только в тех случаях, когда это действительно упрощает структуру.

🛠️ Практическая польза: в чём выигрыш?

📉 Без With:

  • Повторяете имя объекта 3+ раз.
  • Рискуете забыть обновить все вхождения при изменениях.
  • Трудно читать, особенно в длинных макросах.

📈 С With:

  • Код компактнее.
  • Ясно, с каким объектом вы работаете.
  • Меньше шанс ошибок при копировании и редактировании.

📘 Резюме: стоит ли использовать With...End With?

Если вы пишете макросы в Excel — однозначно, да.

Вот почему:

  • ✅ Упрощает структуру кода;
  • ✅ Повышает читаемость;
  • ✅ Помогает избежать дублирования;
  • ✅ Быстрее редактируется;
  • ✅ Экономит ваше время.

Это не просто «фишка для продвинутых» — это базовый инструмент для чистого и устойчивого VBA-кода, который обязательно пригодится как новичкам, так и опытным пользователям.

🧑‍💻 Домашнее задание для закрепления

Попробуйте переделать следующий код с использованием With:

Range("C5").Value = "Hello"
Range("C5").Font.Color = RGB(255, 0, 0)
Range("C5").Font.Size = 16
Range("C5").Interior.Color = RGB(255, 255, 0)

Подсказка: объектом будет Range("C5"). Сравните два варианта — и почувствуйте разницу.

🔮 Вдохновляющее заключение

Код — это тоже форма выражения. И как в языке, где мы стремимся говорить точно и ясно, — в программировании мы стараемся писать лаконично, логично и понятно.

Оператор With — это как знаки препинания: они не добавляют информации, но делают всё на своих местах.

Освойте его — и ваш VBA станет стройным, как хорошо написанное эссе.

Подпишитесь на канал и оставьте свой комментарий под статьёй!