Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Метод Application.Evaluate

    Метод Application.Evaluate используется в VBA Excel для получения значений или ссылок на объекты из строковых выражений. Краткая запись Evaluate.

    Что такое метод Evaluate?

    Evaluate — это в VBA метод объекта Application, который принимает строку с выражением (например, с формулой Excel, именем диапазона или ссылкой на ячейку) и возвращает результат её вычисления.

    Проще говоря, метод Evaluate позволяет выполнить любую формулу, которую вы могли бы вписать в строку формул Excel, прямо из кода VBA. Функции рабочего листа, используемые в качестве аргумента Evaluate, должны быть в англоязычном варианте.

    Метод Evaluate необходим, когда нужно вычислить формулу, сослаться на диапазон или выполнить математическое действие, которое проще описать текстовой строкой.

    Синтаксис метода Evaluate

    Стандартный синтаксис

    Выражение — формула или имя объекта Microsoft Excel с длиной не более 255 символов.

    Объект Application в коде VBA Excel можно не указывать.

    Упрощённый синтаксис

    У метода Evaluate есть более короткий и удобный синоним — квадратные скобки:

    Оба варианта работают идентично, но использование квадратных скобок делает код более чистым и читаемым. Однако, синтаксис с квадратными скобками не допускает использование в аргументе переменных и математических выражений, переданных текстовой строкой.

    Практические примеры с Evaluate

    Давайте рассмотрим основные сценарии использования метода Application.Evaluate.

    Вычисление математических выражений

    Представьте, что вам нужно быстро вычислить результат сложного выражения, сформированного в виде текстовой строки, прямо в коде:

    Как видим из примера, подтверждается информация о том, что синтаксис с квадратными скобками не работает с математическими выражениями, переданными в виде текстовой строки.

    Использование встроенных функций Excel

    Обычно встроенные функции Excel проще использовать с помощью метода WorksheetFunction:

    В функции WorksheetFunction.ArrayToText можно заменить Range("A1:C3") на [A1:C3]. Метод Evaluate рекомендуется использовать для функций листа Excel, не имеющих аналогов в VBA, вызывающихся методом WorksheetFunction.

    Работа с диапазонами и ссылками

    Одно из самых частых применений Evaluate в VBA Excel — создание диапазонов с помощью строковых выражений, манипуляция ими, в том числе с помощью формул.

    Полная ссылка на ячейку

    Присвоение диапазона переменной

    Суммирование значений диапазона

    Динамическое построение формулы

    Использование с Evaluate переменных

    В предыдущем примере уже использовались переменные для динамического построения формулы. Переменные можно применять только со стандартным синтаксисом метода Application.Evaluate:

    Преимущества и недостатки метода Evaluate

    Плюсы

    1. Лаконичность кода: синтаксис с квадратными скобками позволяет писать очень компактный код.
    2. Прямой доступ к функциям Excel: Evaluate позволяет использовать любую функцию из арсенала Excel без метода WorksheetFunction.

    Минусы

    1. Проблемы с производительностью в циклах: если использовать Evaluate для обработки большого количества ячеек в цикле, это окажется значительно медленнее, чем прямое присвоение значений через Range.Value.
    2. Трудности с использованием переменных: для подстановки переменных в выражение нужно вручную формировать строку, применяя конкатенацию, что усложняет код.

    Применение

    Когда стоит использовать Evaluate?

    • Для разовых вычислений сложных математических выражений или функций Excel.
    • Для быстрого обращения к ячейкам и именованным диапазонам в простом, линейном коде.
    • Когда лаконичность кода важнее, чем абсолютная производительность.

    Когда от него лучше отказаться?

    • При обработке больших массивов данных в циклах.
    • В сложных проектах, где важна легкость отладки и поддержки кода.
    • Когда выражение для вычисления динамически формируется с большим количеством переменных.

    Метод Evaluate — это не главный инструмент в арсенале VBA-разработчика, а скорее специальный ключ, который открывает определенные замки.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.