Эта статья — подробный практикум по двум ключевым свойствам объекта Range в Excel VBA: Address и Formula. Вы узнаете, как настраивать типы ссылок (абсолютные, относительные, смешанные), извлекать и задавать формулы в ячейках, и даже конвертировать формулы в значения. Всё объясняется доступным языком и подкрепляется реальными примерами кода.
🔧 Что такое Range.Address и зачем он нужен?
Свойство Address объекта Range возвращает адрес диапазона или ячейки в виде текста. Это полезно, если вы хотите узнать, куда именно ссылается переменная, использовать адрес в логике макроса или отобразить его пользователю.
📘 Базовый синтаксис:
Range("A1").Address
Этот код вернёт строку: "$A$1" — полный абсолютный адрес ячейки.
🎯 Параметры свойства Address
Свойство Address можно настроить с помощью аргументов, чтобы получить адрес в нужном формате:
Range("A1").Address(RowAbsolute, ColumnAbsolute)
🔍 Примеры кода:
✅ Абсолютный адрес
Sub MyAddressAbsolute()
MsgBox Range("A1").Address(True, True)
End Sub
🧾 Результат: "$A$1" — и строка, и столбец закреплены.
✅ Смешанный адрес (строка абсолютна, столбец — нет)
Sub MyAddressMixed()
MsgBox Range("A1").Address(True, False)
End Sub
🧾 Результат: "A$1"
✅ Относительный адрес
Sub MyAddressRelative()
MsgBox Range("A1").Address(False, False)
End Sub
🧾 Результат: "A1"
✅ Диапазон и его адрес
Sub MyRangeAddress()
MsgBox Range("A1:C6").Address(True, True)
End Sub
🧾 Результат: "$A$1:$C$6"
💡 Альтернатива: используем числа вместо логических значений
MsgBox Range("A1").Address(1, 1) ' То же, что и True, True
MsgBox Range("A1").Address(0, 1) ' Столбец абсолютен, строка — нет
📐 Свойство Formula: как работать с формулами в ячейках
sFormula позволяет читать и записывать формулы в ячейки с помощью VBA. Оно работает с английскими формулами, даже если ваш Excel — на русском.
🔍 Пример: получение формулы из ячейки
Sub MyFormulaRead()
MsgBox Range("C9").Formula
End Sub
Допустим, в C9 записана формула:
=SUM(A1:C6)
📤 Макрос выведет: =SUM(A1:C6)
🛠️ Пример: вставляем формулу в ячейку через VBA
Sub MyFormulaWrite()
Range("C9").Formula = "=SUM(A1:C6)"
End Sub
После выполнения кода в ячейке C9 появится формула, считающая сумму диапазона A1:C6. Если вы затем измените значения в этом диапазоне — результат обновится автоматически.
📌 Как превратить формулу в значение?
Иногда бывает нужно засунуть результат формулы, а не саму формулу в ячейку. Например, если вы хотите «заморозить» значение.
📘 Решение:
Sub FreezeFormulaResult()
Range("C9").Formula = "=SUM(A1:C6)"
Range("C9").Value = Range("C9").Value
End Sub
✅ Сначала формула вычисляется, затем её результат затирает формулу, превращая ячейку в обычную с числом.
📋 Подсказка: Value можно не писать
Range("C9") = Range("C9")
📌 Это работает аналогично, потому что .Value — это свойство по умолчанию.
🧠 Практическое применение: когда и зачем использовать
📦 Заключение
Свойства Address и Formula — это базовые, но мощные инструменты автоматизации Excel. Они позволяют:
- управлять форматами адресации;
- гибко формировать формулы через код;
- подменять формулы на статичные значения;
- использовать английский синтаксис для универсальности кода.
Овладев ими, вы сможете писать куда более универсальные, надёжные и удобные макросы.