Страницы: 1
RSS
VBA: Function, Упростить написание вложенных функций
 
Всем добрый день!

Помогите, пжлста - пытаюсь сделать пользовательскую функцию, чтобы упростить расчет и избежать вложенных функций, а работать не хочет ((

Вот эту вещь:
=ИНДЕКС(A:G;ПОИСКПОЗ(J3&J4&J5;A:A&B:B&C:C;0);ПОИСКПОЗ(J6;A1:G1;0))

Пишу как:
Код
Function Tarif(Таблица As Range, Регион, Транспортная, Страховая, Вид_транспорта, СтолбецРегиона As Range, СтолбецТранспортной As Range, СтолбецСтраховой As Range, Шапка_таблицы As Range)
    
    Tarif = WorksheetFunction.Index(Таблица, WorksheetFunction.Match(Регион & Транспортная & Страховая, СтолбецРегиона & СтолбецТранспортной & СтолбецСтраховой, 0), WorksheetFunction.Match(Вид_транспорта, Шапка_таблицы, 0))
    
End Function


Ввожу как функцию массива (Ctrl+Shift+Enter), а ошибка вида #ЗНАЧ в итоге...
Подскажите, почему?
Спасибо!
В полете голова - важнее крыльев
 
А зачем изобретать велосипед? К тому же на сколько я понял ввод UF не сильно проще.  ;)
 
Потому что юзер, которому этот расчет делать, постоянно путает местами искомые значения и диапазоны поиска :)
В полете голова - важнее крыльев
 
я к тому, что если уж и городить UF, то ввод сделать максимально простым, к тому же где гарантия что юзер не будет путать аргументы новой функции?  ;)
 
Вашему совету, LVL, я была бы очень благодарна, если бы к нему прилагалась хоть какая-нибудь идея  :(
А то, что нужно все упростить, - это я и до вас, простите, сама знала и в общем-то пытаюсь делать
И потому за советом сюда и обращаюсь - ибо самостоятельная работа встала по причине пока неизвестной мне ошибки
Изменено: Lissa - 29.03.2013 11:48:56
В полете голова - важнее крыльев
 
Ну чтож держите идею  ;)
 
Lissa, проблема в том, что такое выражение
Код
СтолбецРегиона & СтолбецТранспортной & СтолбецСтраховой

работает только в формулах листа, но не в VBA. Но формулы листа можно использовать в VBA (а не только отдельные функции!)
Предлагаю сократить число аргументов - оставить только Таблицу и значения для поиска, а столбцы и шапку убрать:

Код
Function Tarif(Таблица As Range, Регион, Транспортная, Страховая, Вид_транспорта)
Dim s$, c$, h$
Set Таблица = Intersect(Таблица, Таблица.Worksheet.UsedRange) 'ограничить диапазон
s = Регион & Транспортная & Страховая   'строка поиска
With Таблица
    c = .Columns(1).Address & "&" & .Columns(2).Address & "&" & .Columns(3).Address
    h = .Rows(1).Address
    Tarif = Evaluate("INDEX(" & .Address & ",MATCH(""" & s & """," & c & ",),MATCH(""" & Вид_транспорта & """," & h & ",))")
End With
End Function
Изменено: Казанский - 29.03.2013 12:15:45 (чуть сократил код функции, в файле прежний вариант)
Страницы: 1
Читают тему
Наверх