Предположим, у меня есть текстовая строка, как "11+5"
или даже "=11+5"
хранится в ячейке. Есть ли в Excel функция, которая позволит мне на самом деле вычислять эту строку, как если бы она была формулой?
Это было бы полезно для другого проекта, где я хотел бы иметь возможность писать «динамические» формулы в Excel.
microsoft-excel
worksheet-function
drapkin11
источник
источник
Ответы:
EVALUATE
доступно в VBA во всех текущих версияхВы можете включить его в свой код VBA или обернуть в простой UDF, чтобы сделать его доступным в качестве функции рабочего листа.
Он в основном обрабатывает значение переданного параметра как формулу Excel, как если бы оно было введено в ячейку
"11+5"
и"=11+5"
даст тот же результатисточник
Это полуфункция - ее можно использовать только в Name Manager.
Вот как вы можете использовать это:
Наведите указатель мыши на ячейку и откройте Диспетчер имен (на вкладке ФОРМУЛА или нажав CTRL + F3)
Напишите
=evaluate(
и нажмите на ячейку, которую вы хотите (лучше всего сохранить относительную ссылку).)
eva
).Теперь предположим, что вы выбрали B1 и сделали все это, ссылаясь на A1. В A1 вы можете поставить « 1 + 1 », а в B1 вы пишете
=eva
- как только вы нажмете ENTER, значение B1 будет2
. Поскольку ссылка в Name Manager была относительной, вы можете использовать=eva
для оценки любой ячейки одну оставшуюся ячейку от того места, где вы ее хотите. (например, в B2,=eva
вернет результат ячейки A2)источник
=auswerten(...)
Есть важное предостережение с великолепным ответом @karel и @Laurentiu Mirica: функция оценки не будет пересчитана, если не будет изменена ссылочная ячейка. Например, ячейка C1 содержит текст,
"A1+B1"
а D1 содержит функцию=eval
. Если значения в A1 или B1 изменяются, ячейка D1 не пересчитывается .Это можно исправить, введя энергозависимую функцию либо в строку, либо в eval-ячейку. Это приведет к пересчету каждый раз, когда лист будет пересчитан. Например, ячейка C1 может быть заменена на
=if(today(),"A1+B1",)
. Или D1 можно заменить на=if(today(),eval,)
. Любая изменчивая функция должна делать.Третье и, возможно, самое простое решение - изменить полуфункцию в менеджере имен на
=if(today(),evaluate(c1),)
источник
если вы используете это в ячейке (наряду с сцеплением), это может быть очень полезно.
Например, эта формула отобразит значение ячейки B5 на другом листе (имя которого хранится в ячейке A2 на этом листе):
Для работы INDIRECT внешний лист должен быть открыт.
источник