Вычислить формулу, записанную текстом в ячейке Excel


: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/users/d/dm9/domains/mokshin.su/includes/unicode.inc on line 311.

Как вычислить формулу, записанную текстом в ячейке Excel?

Иногда, как ни странно, возникает такая потребность. Когда, например, эта самая формула является результатом каких-то других преобразований (и сама рассчитывается всякими функциями).

Т.е., к примеру, в столбце A последовательно в ячейках есть текст:
1+3
4*6/3
2+6/3

Соответственно в столбце B нужно получить значения:
4
8
4

Вариант 1:
Вроде быть есть пакет надстроек Morefunc, который после установки позволяет использовать функцию EVAL.

Вариант 2:
В VBA есть функция Eval, которая, собственно, выполняет то, что нам нужно. Т.о. можно написать свою публичную функцию (например MyEval), которая будет принимать параметр, скармливать его Eval, и возвращать полученное значение. Затем эту функцию использовать в формулах в столбце B: =MyEval(A1)

Если не хочется связываться с VBA, то есть более изощренный способ ;-) - Макрофункции. Способ почерпнут отсюда: http://www.excelworld.ru/publ/funcs/makrofuncs/makrofuncs/24-1-0-50

Вариант 3 (пример для MS Excel 2003):
Выделяем ячейку B1. Создаем Имя (по Ctrl+F3), например, MyEval. В поле Формула пишем =ВЫЧИСЛИТЬ('Лист1'!A1). Нажимаем Добавить.
Далее в ячейке B1 пишем формулу =MyEval. Нажимаем Enter, любуемся результатом, копируем ячейку B1 вниз для расчета остальных формул.
Тут, конечно, есть особенности - нельзя, например, адресовать произвольную ячейку в качестве аргумента, - но зато не нужно заморачиваться с VBA и дополнительными надстройками. :-)


Нравится