2013-02-11 3 views
3

Как мне оценить текстовую строку, содержащую именованный диапазон? Я пробовал с EVAL, ОЦЕНКОЙ И КОСВЕННЫМИ без успеха.Оценить текст, содержащий именованный диапазон

Немного подробнее ..

В другой системе, у меня есть 50+ формулы с переменными 200+, пример следующим образом:

<ABC>+<DEF>/<TRE-1> 

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

=ABC+DEF/TRE_1 

Я все ссылки variab les до именованных диапазонов. Для например:

ABC является ячейка B2, значение 5,4

DEF клеточно B3, значение 3,2

TRE_1 клеточно B4, значение 1

Но тогда я не могу получить в результате строка, вычисляемая с помощью INDIRECT или EVALUATE. Он просто дает мне ошибку #NAME или #REF, потому что кажется, что она не распознает переменную как именованный диапазон (и, следовательно, значение).

Любые идеи?

Я не хочу реализовывать это в VBA. Я знаю, что это возможно с использованием метода .RefersTo.

+0

+1 для нетривиальной проблемы –

ответ

0

INDIRECT dows не оценивает формулы, только ссылки: вам нужно использовать Evaluate, но это доступно только через интерфейсы XLM или COM.
Вы можете встроить Evaluate внутри формулы определенного имени, но часто этот метод непрактичен.

4

Попробуйте использовать этот синтаксис:

=INDIRECT("ABC")+INDIRECT("DEF")/INDIRECT("TRE_1")

Обратите внимание на кавычки. Кажется, что это как INDIRECT работы: =INDIRECT("ABC+DEF") возвращает #REF!

Смотрите также этот пример: https://www.dropbox.com/s/jxj7cgjmnx8iv0t/INDIRECTwithNamedRegions.xlsx

+0

Этот ответ должен стать принятый ответ, строка в INDIRECT является ссылкой на ячейку, а не формула (поскольку «КОСВЕННЫЙ» означает «косвенную ссылку»). И ссылка правильно оценивает, если это именованный диапазон.'= INDIRECT (" NamedRange1 ") + INDIRECT (" NamedRange2 ")' работает. –

+0

Спасибо за отзыв, но это всего лишь одна из 50 + формул, которые у меня есть, где мне это нужно, чтобы упростить работу, поэтому я не могу использовать несколько косвенных ссылок. Я отредактирую вопрос. –

+0

@bb_pt вам лучше представить новый, чтобы избежать путаницы - ответы уже отправлены не будут редактироваться –

0

Решение VBA (как видно here или here) является установка UDF (User Defined Function) внутри модуля в течении Учебное пособие, как, например, для:

Function Eval(ByVal S As String) As String 

Eval = Evaluate(S) 

End Function 

Имея установку переменных, как именованные диапазоны, в ячейке введите:

=Eval("ABC+DEF/TRE_1") 

И он выберет результат правильно.

Теперь .. Я не хочу использовать VBA ...

+0

Только сейчас, при его внедрении, я заметил, что может быть полезно добавить «Application.Volatile» в код для UDF пересчитываться каждый раз, когда происходит расчет (а не только при вводе формулы). –

Смежные вопросы