Страницы: 1
RSS
Вызов именованной формулы по условию, Нужен пользовательский аналог ДВССЫЛ для работы с именованными формулами.
 
Добрый день!

Созданы именованные формулы ИНДЕКС() для определения значения норматива из баз по регионам. По коду региона, с помощью формулы "НБ_"&Регион генерируется имя именованной формулы, которая должна быть вызвана. Но вызвать именованную формулу способом ниже не удается, подскажите, ошибку.
Код
Function UseThisName(iName As String)
    UseThisName = Name(iName).Value
End Function
 
Александр, Можно как то более понятно.
По вопросам из тем форума, личку не читаю.
 
Код
UseThisName = Names(iName).Value
Изменено: StoTisteg - 30.08.2018 14:39:03
 
Не срабатывает. Прикладываю пример.
Изменено: Александр - 30.08.2018 15:53:18
 
Александр, про цитирование - хотели сделать акцент на 30 августа? Зачем тут вообще цитата?
 
Александр, вы сперва разберитесь что у вас в этих именах, да и функция не нужна простой Indirect заменит.
По вопросам из тем форума, личку не читаю.
 
В соответствующие имена внесены формулы, извлекающие норматив из соответствующей внешней базы. ВПР() по коду региона определяет, какая из формул должна быть использована для текущего расчета.
ДВССЫЛ() использовать не получается.
Изменено: Александр - 30.08.2018 16:23:48
 
Цитата
Александр написал:
В соответствующие имена внесены формулы
Это понятно, вопрос, а они работают?
По вопросам из тем форума, личку не читаю.
 
Вы правы, сбил один аргумент. В текущем вложении именованные формулы исправил, можно проверить введя НБ_Алтай.
 
Александр, при таком вызове не работает относительная адресация, которую вы использовали. такой подход не сработает ни с VBА, ни с Indirect
По вопросам из тем форума, личку не читаю.
 
Не, если функцию переписать так
Код
Function UseThisName(sName As String)
    Application.Volatile
    UseThisName = Evaluate(Names(sName).Name)
End Function
то, в принципе, сработает:
 
С.М., Да, вчера недокурил.  Хотя даже е знаю, что лучше, использовать INDIRECT, переписав формулу, или  то как предложено.
Александр,  А почему разные диапазоны в именах?
=INDEX(НБ_Алтай!$A$1:$AH$14;MATCH(ТККонс!$H4;НБ_Алтай!$H$1:$H$14;0);MATCH(ТККонс!I$3;НБ_Алтай!$A$1:$AH$1;0))
=INDEX(НБ_Воронеж!$A$1:$AH$19;MATCH(ТККонс!$H4;НБ_Воронеж!$H$1:$H$19;0);MATCH(ТККонс!J$3;НБ_Воронеж!$A$1:$AH$1;0))
Я про строки 14 и 19.
По вопросам из тем форума, личку не читаю.
 
Используются разные нормативные базы по регионам, размерность которых зависит от присутствующей там техники.
Спасибо за уделенное время и решения!
 
Александр,  то что разные базы я понял, но почему размерность диапазонов меньше чем размерность данных на листах. В прочем это вопрос не этой темы.

Конечно Indirect летуч, но без оптимизации , просто вот такая формула получается
=INDEX(INDIRECT("'НБ_"&VLOOKUP($A5;СпрРегион!$A$2:$C$8;2;0)&"'!$A$1:$AH$25";1);MATCH(ТККонс!$H5;INDIRECT("'НБ_"&VLOOKUP($A5;СпрРегион!$A$2:$C$8;2;0)&"'!$H$1:$H$25";1);0);MATCH(ТККонс!I$3;INDIRECT("'НБ_"&VLOOKUP($A5;СпрРегион!$A$2:$C$8;2;0)&"'!$A$1:$AH$1";1);0))
а если запрятать в имя RegSheet ="'НБ_"&VLOOKUP(ТККонс!$A4;СпрРегион!$A$2:$C$8;2;0)&"'" то
=INDEX(INDIRECT(RegSheet&"!$A$1:$AH$25";1);MATCH($H4;INDIRECT(RegSheet&"!$H$1:$H$25";1);0);MATCH(I$3;INDIRECT(RegSheet&"!$A$1:$AH$1";1);0))
Изменено: БМВ - 31.08.2018 09:40:09
По вопросам из тем форума, личку не читаю.
 
Недосмотрел при подготовке примера. Файл обрабатывает массив нормативов на более чем 10 000 строк, находящийся во внешнем файле.
Страницы: 1
Наверх