Страницы: 1 2 След.
RSS
LAMBDA: подсчет букв, подсчет веса букв
 
задача вроде бы и не сложная, она легко делается в видее нескольких формул.
Но я просто чувствую, что это легко делается рекурсией через LAMBDA
Вот файл с правильным результатом.
Просто берется каждая буква , находится по  =ВПР(база) вес буквы.
Но как это сделать через LAMBDA ?
Я находил похожие примеры, но там даже сложнее, там 2 слова, 2 перебора. Я не могу ее упростить до 1 слова.
Я бы понял и стал юзать эту LAMBDA более активно.
Линк
Изменено: provera - 27.11.2023 12:39:36
 
Цитата
provera написал:
делается в видее нескольких формул.
да можно и одной. Или нужна именно рекурсия? В интернете полно примеров организации рекурсии.
Код
=LET(
    chars, MID(D4, SEQUENCE(1, LEN(D4)), 1),
    no_blank, FILTER(chars, chars <> " "),
    result, REDUCE(
        0,
        no_blank,
        LAMBDA(s, c, s + INDEX(C4:C36, MATCH(c, B4:B36)))
    ),
    result
)
Пришелец-прораб.
 
AlienSx, спасибо. Я в VBA вообще никак, не стоит и начинать. А вот LAMBDA это реально ?
А вижу LAMBDA, а без VBA никак ? Я ну я бы хотел, чтобы это было в чистом Excel . Надо дать этой LAMBDA bvz? и рекурсию. Или я не знаю, чего хочу :)  ?
ли это не VBA ?
Изменено: provera - 26.11.2023 17:02:04
 
Цитата
provera написал:
ли это не VBA ?
или. Это формула Excel.
Пришелец-прораб.
 
AlienSx, понял. Но я вставил в ячейку  в Excel Online -- не работает. Я так понял, что там должна быть 1 цифра общего веса букв. Не идет.
Excel-Online: Слово.xlsx
Изменено: provera - 27.11.2023 13:00:00
 
provera, какая -то ерунда. Попробуйте нажать F2 и Enter. У меня в online все работает. Да и не в онлайн тоже.
Изменено: AlienSx - 26.11.2023 17:41:52
Пришелец-прораб.
 
AlienSx, да , есть. Спасибо. конечно.
Не думал, что так сложно. Как в это разобраться.
Я думал LAMBDA  начать пользовать с такого простого случая. Видно, не судьба.
 
AlienSx, вот я нашел здесь  пример похожий.
Код
=LAMBDA(a;b;ЕСЛИ(b="";a;ОЧИСТКА(ПОДСТАВИТЬ(a;ЛЕВСИМВ(b);"");ПСТР(b;2;255))))
здесь идет вроде как очистка строки от пробелов. И здесь эта ламбда именно рекурсия. Сама Ламбда названа  ОЧИСТКА(). И ссылается сама на себя.
По смывслу это близкие задачи. Не ожидал, что ваше решение такое сложное.
Изменено: provera - 30.11.2023 03:53:43
 
да оно и без всяких новшеств не сложно делается
Массивка
=SUM(IFERROR(INDEX(C:C;N(INDEX(MATCH(MID(D4;ROW(A1:INDEX(A:A;LEN(D4)));1);B:B;);)));))
По вопросам из тем форума, личку не читаю.
 
Цитата
provera написал:
ОЧИСТКА
это что то, что введено в качестве новой функции? Ничего не понял. Мое решение с LET как раз прозрачное. Оно делает все по шагам, которые прозрачны и понятны. Вы же пытаетесь все усложнить со своей рекурсией. Хотя, если цель данного поста понять как рекурсию организовать с помощью LAMBDA, то простите, что ввожу вас в заблуждение.
Пришелец-прораб.
 
БМВ, у вас в формуле почему-то ссылки на столбец А:А и ячейку А1. Там ничего нет. В итоге не работает. Но тоже спасибо.
 
provera, если понимать как оборачивается функциями значения, то станет понятно что не важно есть ли в a1, что-то. А для работа надо перевести функции, и обратить внимание что написано про массивность формулы.
По вопросам из тем форума, личку не читаю.
 
БМВ, да вообще странная ситуация. У меня Офис не ставится. Раньше проблем не было. Чем новее Виндовс , тем хуже .
Сижу на Excel Online  -- он весь на русских формулах. Я же его не заставляю, и настроек у него нет. Откуда там русский ?
Изменено: provera - 26.11.2023 18:49:33
 
Цитата
provera написал:
Откуда там русский ?
например из региональных настроек вашей ОС.
По вопросам из тем форума, личку не читаю.
 
БМВ, работает. Благодарность. Тоже без рекурсии. Там же нет цикла, как она считает ? Спаасибо, буду разбираться.
 
Тогда ещё вам "не лямбда, не рекурсия" provera,  
=СУММПРОИЗВ(СУММЕСЛИ(B$4:B$36;ПСТР(D$4;СТРОКА(A$1:ИНДЕКС($A:$A;ДЛСТР(D$4)));1);C$4:C$36))

пс: а "лямбду-рекурсию" изучайте - когда-нибудь может быть в этой же теме выложите своё решение )
 
Вот вам ИМХО простое решение с lambda, но без рекурсии:
=СУММ(MAP(ПСТР(D4;ПОСЛЕД(999);1);LAMBDA(x;ЕСНД(ВПР(x;B:C;2;);0))))
=СУММ(MAP(ПСТР(D4;ПОСЛЕД(999);1);LAMBDA(x;ЕСНД(ПРОСМОТР(x;B:C);0))))
=СУММ(MAP(ПСТР(D4;ПОСЛЕД(999);1);LAMBDA(x;ПРОСМОТРX(x;B:B;C:C;0))))     ' меньше на одну функцию
 
Павел \Ʌ/, да, спасибо. Мне остается только собирать правильные решения без этой Лямбды. Я там оставил место и для себя , точнее, для нее. :)
 
ваще-то lambda тут лишнее:
=СУММ(ЕСНД(ВПР(ПСТР(D4;ПОСЛЕД(999);1);B:C;2;);))
=СУММ(ЕСНД(ПРОСМОТР(ПСТР(D4;ПОСЛЕД(999);1);B:C);))
=СУММ(ПРОСМОТРX(ПСТР(D4;ПОСЛЕД(999);1);B:B;C:C;0))
 
Цитата
БМВ:  без всяких новшеств не сложно делается Массивка
=СУММ(ЕСНД(ВПР(ПСТР(D4;СТРОКА(1:999);1);B:C;2;);))
 
Бахтиёр, да действительно, Уже компактнее некуда. Я думал, со свей рекурсией будет вообще пару байт :) .
Не знал, что ВПР() умеет массивы искать. Спасибо. Элегантно.
Тока сейчас заметил, что MS смогли убрать целую кнопку "Выполнить по шагам", которую я вчера искал . Оскорблял их в грубой форме.
Они все вычисления засунули в адресную строку в Tips. Красиво.
Изменено: provera - 27.11.2023 11:43:03
 
provera, эцих с гвоздями лямбда с рекурсией. Кладете в менеджер имен вот такую формулу
Код
=LAMBDA(total, chars,
    IF(
        chars = "",
        total,
        my_lambda(
            total +
                IFERROR(INDEX(Sheet1!B3:B34, MATCH(LEFT(chars, 1), Sheet1!A3:A34)), 0),
            RIGHT(chars, LEN(chars) - 1)
        )
    )
)

и называете ее my_lambda. А потом просто вызывайте ее = my_lambda(0, c2)
Изменено: AlienSx - 27.11.2023 11:44:47
Пришелец-прораб.
 
AlienSx,  Да все работает. .Вот она Рекурсия ! Наконец-то, осталось разобраться :). Мозг подровнять под нее.
В Excel-online нет Менеджера имен. Опять чего-то забыли. Например, в Excel-online нельзя просто ОТКРЫТЬ файл, только из самого OnDrive.
Молоццы.
Шас бeду выкачивать кусок Офиса в виде Excel  из их серверов. Мне даже Word не надо.
Спасибо еще разок.  
Изменено: provera - 27.11.2023 12:20:36
 
Цитата
: MS смогли убрать целую кнопку "Выполнить по шагам",
Вы об этом? (см.скрин)
На моём 365 он на месте.
Цитата
Они все вычисления засунули в адресную строку в Tips. Красиво.
Согласен, удобно сделали, причём можно выделять любой блок вычислений. Например в формуле:
=СУММ(МАКС(A1:A10)*МИН(B1:B10))
можно выделить A1:A10 или МИН(B1:B10) или МАКС(A1:A10)*МИН(B1:B10) и т.д.
 
а чего так плохо ? Интересно, в предпросмотре сообщения вставляется картинка из буфера обмена. А в самом сообщении только ее адский код.
Пора бы уже подкрутить форум под новые движки.
Как миниму 2 движка это умеют -- NodeBB и еще один.
Изменено: provera - 27.11.2023 12:25:33
 
provera, понял вы про excel-online говорили, а я про стационарный 365
 
Цитата
Бахтиёр написал:
=СУММ(ЕСНД(ВПР(ПСТР(D4;СТРОКА(1:999);1);B:C;2;);))
может и делается, но не работается.  Может в более новых версиях ВПР начал возвращать массив, но в как минимум до 2016  включительно, вернет ошибку.
По вопросам из тем форума, личку не читаю.
 
Бахтиёр, да, MS бережет свою Лямбду. Она есть только у них на сайте . В обычных не совсем лицензионных Office 2021 ее нет.
 
Цитата
написал:
Может в более новых версиях ВПР начал возвращать массив, но в как минимум до 2016  включительно, вернет одно значение,
У меня-то на 365 всё работает, но вот прям чувствовал. что что-то не-то (что это может не работать на старых версиях), но у нас было время обеда, и не было возможности проверить на компьютере сослуживцев. А у самого нет другого Excel, кроме 365. :-):-):-)
Изменено: Бахтиёр - 27.11.2023 13:36:41
 
Бахтиёр, я проанализировал -- формула не должна работать !
Код
=ПСТР(D4;СТРОКА(1:999);1)

как она в текстовой строке находит  массив из (1:2:3:4: ... ) ?

Страницы: 1 2 След.
Наверх