Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Создание UDF-аналога функции УСЛОВИЯ (появилась в новом Excel)
 
Доброго вечера, уважаемые форумчане!
Не буду писать про помощь, т.к. своих наработок совсем нет (не знаю, как эти условия записывать). Тем не менее, нужна такая чудо-функция, как УСЛОВИЯ (что-то типа ЕСЛИМН).
Помогите, пожалуйста, кто-чем может  :D
И вообще подскажите, стоит ли игра свеч? Не шустрее ли будет классическая связка ИНДЕКС+ПОИСКПОЗ???

P.S.: с МАКСЕСЛИ и МИНЕСЛИ я как-то с полгода назад разобрался (нашёл решение через АГРЕГАТ и 2 пары UDF)
Изменено: Jack Famous - 13 Сен 2017 17:23:13
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Ну вот возьмите, поиграйтесь. Именно АНАЛОГ, без возможности добавить своё значение, если не будет ни одной ИСТИНЫ. В таком случае возвращается ЛОЖЬ
На универсальность не претендую, т.к. не тестировал во всех возможных вариациях. Примеры работы взяты из Вашей ссылки выше
Код
Function ЕСЛИИСТИНА(ParamArray Conditions())
'Conditions() - массив ПАР значений вида: Условие1;Значение_если_ИСТИНА_1;...;УсловиеN;Значение_если_ИСТИНА_N, обязательный
'               должен иметь хотя-бы одну пару значений.
For I = LBound(Conditions) To UBound(Conditions) Step 2
    If Application.Evaluate(Replace(Conditions(I), ",", ".")) Then
        ЕСЛИИСТИНА = Conditions(I + 1)
        Exit Function
    End If
Next
ЕСЛИИСТИНА = False
End Function
Согласие есть продукт при полном непротивлении сторон.
 
Sanja, как всегда выручаете))) спасибо большое! Кстати, где-то именно у вас я и увидел как-то вот такую короткую запись для множества пар условий. Потестирую и выложу результаты…
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Мда, в теории эта функция была куда круче…))) ещё раз большое спасибо вам, Sanja за помощь!  :idea:
Буду искать улучшения дальше…
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал: в теории эта функция была куда круче…
Не понял...
Вариант, с возможностью указания (первым аргументом) значения, для варианта ЛОЖЬ
Код
Function ЕСЛИИСТИНА(iFalse, ParamArray Conditions())
'iFalse - значение, возвращаемое функцией, если не выполнено ни одно из условий
'Conditions() - массив ПАР значений вида: Условие1;Значение_если_ИСТИНА_1;...;УсловиеN;Значение_если_ИСТИНА_N, обязательный
'               должен иметь хотя-бы одну пару значений.
For I = LBound(Conditions) To UBound(Conditions) Step 2
    If Conditions(I) Then
        ЕСЛИИСТИНА = Conditions(I + 1)
        Exit Function
    End If
Next
ЕСЛИИСТИНА = iFalse
End Function
Изменено: Sanja - 13 Сен 2017 19:42:54
Согласие есть продукт при полном непротивлении сторон.
 
Цитата
Jack Famous написал #1:
нужна такая чудо-функция, как  УСЛОВИЯ
Сочинил две ЮДФки, которые, совместно с функциями ВЫБОР() или ИНДЕКС() работают
как аналоги функций 2016-го Экселя УСЛОВИЯ() и ПЕРЕКЛЮЧ().
Подробности и примеры - в прикреплённом:
Изменено: С.М. - 16 Сен 2017 12:51:46
 
Всем доброй пятничной ночи! Сегодня без тусовок)) Вот я балбес — тему создал и не подписался)))
Sanja, прошу прощения(((( большое вам спасибо за второй вариант! Под теорией (то, что вы не поняли) я имел ввиду то, что при разборе описания (оригинальной УСЛОВИЯ в справке Microsoft) ждал от неё большего.
Однако теперь, с вашей модернизацией, я точно найду ей применение!)))) пока потенциал её вижу только в том, что вместо
=ЕСЛИ(A1="понедельник";1;ЕСЛИ(A1="вторник";2;ЕСЛИ(A1="среда";3;"не подошло"))) можно писать
=ЕСЛИ("Не подошло";A1="понедельник";1;A1="вторник";2;A1="среда";3), что почти то же самое (только без повторения ЕСЛИ и скобок поменьше). Подскажите, если я слеп))))

С.М., спасибо за пример другой функции)) выглядит поинтересней, чем УСЛОВИЯ, но я так же не нашёл большого выигрыша для её использования. По-прежнему у меня в топе МАКСЕСЛИ и МИНЕСЛИ, а таже СцепитьЕсли от Димы «The_Prist» Щербакова. Последней нет в штаных функциях даже Excel 365 (напрасно), однако не упомянуть её я не мог)))
Эта ПЕРЕКЛЮЧ для меня, как ВПР (или ИНДЕКС+ПОИСКПОЗ) со вложенным массивом. То есть не нужно строить дополнительную табличку, вводи всё прямо в формулу. Ну такое))) я люблю прозрачность и всё контролировать, а тут для изменения/дополнения условий ещё и "вскрывать" функцию надо… Брррр. Не гоже.
Ваши примеры не понял (врать не буду  :D ) очень много всего)))

А вообще, уважаемые мастера, подскажите, какой выигрыш и в каких случаях эти новые функции дают? С удовольствием потестил бы  :idea:
Изменено: Jack Famous - 16 Сен 2017 00:36:33
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
Страницы: 1
Читают тему (гостей: 2)