Страницы: Пред. 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 След.
RSS
Избушка формулистов-3, не для вопросов, но для формульных задач
 
3D engine on MS Excel - without vba
https://www.youtube.com/watch?time_continue=282&v=iCeOEQVUWZ0


наверное после такого избушку можно закрывать ;-)
 
Цитата
Ігор Гончаренко написал:
заказчик со старта хотел формулу и я со старта искал формулу, в том числе и универсальную, но и так чуть мозг не оплавился, пока потом для 3-х сочинил))а сделать универсальную, для произвольного количества отнимаемых единиц - было бы здорово!
Здравствуйте!
Только что зарегистрировался на сайте. Прочитал бОльшую часть Избушки. Очень интересные задачки. Уже две недели решаю. Для некоторых удалось без подсматривания улучшить результат. Мозг закипает.
Поднял тему.
Решение уже не актуально, но некоторые варианты кому-нибудь пригодятся.

Неоптимальное решение:

Код
=B1-(B1>=НАИБОЛЬШИЙ($B1:$V1;3))*(СУММ($A1:A1;-$A2:A2)<3)

Хорошее решение:

Код
=B1-ИЛИ(СТОЛБЕЦ()=ОСТАТ(НАИБОЛЬШИЙ($B1:$V1*100+СТОЛБЕЦ($B:$V);{1;2;3});100))
Универсальное решение:

Код
=B1-ИЛИ(СТОЛБЕЦ()=ОСТАТ(НАИБОЛЬШИЙ($B1:$V1*100+СТОЛБЕЦ($B:$V);СТРОКА(СМЕЩ(A$1;;;$A$2)));100))

Надеюсь, никто не будет возражать, если я подниму старые-престарые темы и задачки?

А потом и в новых поучаствую.

Добавлено.

Ну вот, первый блин комом! Не понял задачу. Исправлюсь.

Изменено: Светлый - 08.03.2019 00:57:03
 
Добрый день!
А милых, да к тому же и умных девушек с праздником весны и любви.
Старая тема,
Решение:
Код
=СМЕЩ(ДВССЫЛ(G1);(H1-1)/ЧИСЛСТОЛБ(ДВССЫЛ(G1));ОСТАТ(H1-1;ЧИСЛСТОЛБ(ДВССЫЛ(G1))))
 
Off
Светлый,  таки зарегистрировались :-)
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
таки зарегистрировались
Да вот, зашёл в Избушку, втянулся.
Старая тема.
Формулы на другом принципе, чем у МСН.
Для 2003:
Код
=МИН(ЕСЛИ(МУМНОЖ(ТРАНСП(-(Ч(СМЕЩ(D$1;(A2<B$1:B1)*(B2>=A$1:A1)*(СТРОКА($1:1)-1);))=СТОЛБЕЦ(A:CU)));СТРОКА($1:1))=0;СТРОКА($1:$99)))
Добавил 12.05.2021
Код
=ПОИСКПОЗ(;ЧАСТОТА((A$1:A1<B2)*(B$1:B1>A2)*Ч(+C$1:C1);СТРОКА($1:99)-1);)-1 ' Как и все
=ПОИСКПОЗ(;ЧАСТОТА((A$1:A1<B2)*(B$1:B1>A2)*Ч(+C$1:C1);СТРОКА($1:99));)     ' Инструменты начинаются с номера 2
Конец добавленного.
Для >=2007:
Код
=МИН(ЕСЛИ(СЧЁТЕСЛИМН(B$1:B1;">"&A2;A$1:A1;"<"&B2;E$1:E1;СТРОКА($1:$99))=0;СТРОКА($1:$99)))
Код
=МАКС((СЧЁТЕСЛИМН(B$1:B1;">"&A2;A$1:A1;"<"&B2;F$1:F1;СТРОКА($1:$19))=0)*СТРОКА($1:$19))
Изменено: Светлый - 12.05.2021 20:59:01
 
Цитата
Светлый написал:
Решение:
Все таки в СМЕЩ лучше добавить ";1;1", иначе возвращается массив, а не одно значение
Изменено: MCH - 16.03.2019 14:40:22
 
Цитата
Светлый написал:
Для >=2007
можно и так (если скрестить решения):
Код
=ПОИСКПОЗ(;СЧЁТЕСЛИМН(B$1:B1;">"&A2;A$1:A1;"<"&B2;E$1:E1;СТРОКА($1:$99));)

Код
=ПОИСКПОЗ(;СЧЁТЕСЛИМН(B$1:B1;">"&A2;A$1:A1;"<"&B2;H$1:H1;СТОЛБЕЦ(A:ZZ));)
Изменено: MCH - 17.03.2019 23:41:47
 
Добрый день всем!
Немного повозился с задачкой из поста №649
Удалось решить формулой, но коэффициенты учитывал только для ранжирования.
Формула расставляет по рангу только "правильные" объекты. (не запрещён, не задано значение, имеется коэффициент.) и раскидывает им порции по 3 штуки. Если штук мало, достанется не всем, а если больше, то раскидывает в той же последовательности по второй порции/, по третьей и т.д. Если порций одна-две, то решение близко к условию. Если порций много, то всем достаётся примерно поровну, независимо от коэффициента.
Код
=ЕСЛИ(C2=0;СУММ(3*(ЕСЛИОШИБКА(ВПР(A2;Коэф.!A:B;2;);)+СТРОКА()%%%=НАИБОЛЬШИЙ((C$2:C$316=0)*Ч(СМЕЩ(Коэф.!B$1;ЕСЛИОШИБКА(ПОИСКПОЗ(A$2:A$316;Коэф.!A$2:A$313;););))+СТРОКА($2:$316)%%%;ОСТАТ(СТРОКА(ДВССЫЛ("1:"&ОТБР((M$1-СУММ(C:C))/3)))-1;СУММ(СЧЁТЕСЛИ(Коэф.!A:A;A$2:A$316)*(C$2:C$316=0)))+1)));)
Только сдаётся мне, что условия немного другие, чем я представлял. В решении встречается 4 , 5.
Надо подумать.
Изменено: Светлый - 19.03.2019 13:12:36
 
Старая задача из первой избушки: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=11348&TITLE_SEO=11348&MID=136964#message136964
пост 484
Нужно сделать выборку непустых значений из диапазона

Есть формула на 108 знаков (правда с некоторыми ограничениями)
 
Пока 160 символов. Но это так, без идей. Прямое решение.
*Ещё одно совершенно другое решение нашёл на 166 символов.
**Ещё одно совершенно другое решение нашёл на 139 символов.
***Ещё одно совершенно другое решение нашёл на 136 символов. Уж полночь близится, а формулы всё нет.
Изменено: Светлый - 31.05.2019 10:06:51
 
Есть на 150 с "=",
Без использования {1;2;3;4}
Изменено: Akropochev - 29.05.2019 19:08:04
 
Ужас, попытался сделать в лоб --- 223  8-0
Посмотрел старую тему, мой франкинштейн чем-то похож на решение от  Михаил Витальевич С.
Изменено: Ivan.kh - 29.05.2019 16:59:26
 
Иная идея осенила.
Идея на массив из 6 столбцов. Пока что для 4-х столбцов получается 122
*ну вот и у меня 110:)
Предполагаю, что с МСН Уважаемым решения похожие.
Изменено: Akropochev - 30.05.2019 16:47:50
 
когда решения покажете?
все жду жду
 
решил таки сюда заглянуть, нарисовалась формула в 108 символов, только данные возвращает в другом порядке
4
9
з
45
...
15
Изменено: Андрей Лящук - 02.06.2019 01:00:12
 
Цитата
artyrH написал:
когда решения покажете?
Наверное можно вскрываться, выкладываю свое решение
3 однотипных варианта на 107/108 символов
1 и 2 вариант выдает нужную последовательность, но есть ограничения по количеству строк и столбцов
Вариант 3 не имеет ограничения, но последовательность выборки другая (вначале по столбцам, затем по строкам)
Код
=ДВССЫЛ(ТЕКСТ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D$12<>"";ВРЕМЯ(;СТОЛБЕЦ(A$4:D$12);СТРОКА(A$4:D$12)));СТРОКА(A1));"RсCм");)

Код
=ДВССЫЛ(ТЕКСТ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D$12<>"";ДАТА(;СТОЛБЕЦ(A$4:D$12);СТРОКА(A$4:D$12)));СТРОКА(A1));"RДCМ");)

Код
=ДВССЫЛ(ТЕКСТ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D$12<>"";СТОЛБЕЦ(A$4:D$12)+СТРОКА(A$4:D$12)*10^3);СТРОКА(A1));"R0C000");)
Изменено: MCH - 02.06.2019 08:33:41
 
Ни фига себе...Я был уверен, что самое короткое решение у меня и MCH, идентичное или похожее по замыслу.
Но Маэстро крут нереально. Я тоже очень долго игрался с Текст(блаблабла,"форматами") цифр и букв, например, как сделать из "A1" " A001",
но пошёл в итоге иным путём.
Первое внятное что получилось
Код
=ДВССЫЛ(ИНДЕКС(ТЕКСТ(МОДА.НСК(ТРАНСП(СТРОКА($4:$12)*10^5+{1;2;3;4});ЕСЛИ(A$4:D$12<>"";СТРОКА($4:$12)*10^5+{1;2;3;4}));"R0C00000");СТРОКА(A1));0)
Ну а финальное у меня, когда я подумал, что с MCH, мы думаем одинаково получилось так
Код
=ДВССЫЛ(ДЕС.В.ШЕСТН(АГРЕГАТ(15;6;(256*(10+{0;1;2;3})+ШЕСТН.В.ДЕС(СТРОКА($4:$12)))/(A$4:D$12<>"");СТРОКА(A1))))
Остальные вариации в файле
Изменено: Akropochev - 02.06.2019 10:40:29
 
Не подсматривая дошел до вариата MCH, но пришлось укорачивать
=ДВССЫЛ(ТЕКСТ(НАИМЕНЬШИЙ(ЕСЛИ($A$4:$D$12<>"";--(СТРОКА($4:$12)&-СТОЛБЕЦ($A:$D)));СТРОКА(A1));"RДCМ");)
Изменено: БМВ - 02.06.2019 13:11:08
По вопросам из тем форума, личку не читаю.
 
моя формула с небольшими махинациями
Код
=ДВССЫЛ("r"&ПОДСТАВИТЬ(НАИМЕНЬШИЙ((A$4:D12="")/1%%+СТРОКА(A$4:D12)+СТОЛБЕЦ(A$4:D12)%%;СТРОКА(F1));",";"c");)

формула в 96 символов из 3й формулы Михаила
Код
=ДВССЫЛ(ТЕКСТ(НАИМЕНЬШИЙ((A$4:D12="")/1%%+СТРОКА($4:12)*10^3+СТОЛБЕЦ(A:D);СТРОКА(F1));"r0c000");)
Изменено: Андрей Лящук - 02.06.2019 14:35:39
 
А у меня родились только "классические" варианты:
Код
=ИНДЕКС(A:D;ОСТАТ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D$25>0;СТОЛБЕЦ(A:D)*22+СТРОКА($4:$25));СТРОКА(G1));22);НАИМЕНЬШИЙ(ЕСЛИ(A$4:D$25>0;СТОЛБЕЦ(A:D)*22+СТРОКА($4:$25));СТРОКА(G1))/22)
Код
=ИНДЕКС(A:D;ОСТАТ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D$18>0;{1;2;3;4}*15+СТРОКА($4:$18));СТРОКА(G1));15);НАИМЕНЬШИЙ(ЕСЛИ(A$4:D$18>0;{1;2;3;4}*15+СТРОКА($4:$18));СТРОКА(G1))/15)
Код
=ИНДЕКС(A:D;СТРОКА(W4)-ПРОСМОТР(СТРОКА()-4;СЧЁТЕСЛИ(СМЕЩ(A$4;;;99;{1;1;2;3});"<>")*{0;1;1;1});ПОИСКПОЗ(СТРОКА()-4;СЧЁТЕСЛИ(СМЕЩ(A$4;;;99;{1;1;2;3});"<>")*{0;1;1;1};1))
Код
=ЕСЛИ(A4="";ЕСЛИ(СМЕЩ(B4;-СЧЁТЗ(A$4:A20);)="";ЕСЛИ(СМЕЩ(C4;-СЧЁТЗ(A$4:B20);)="";СМЕЩ(D4;-СЧЁТЗ(A$4:C20););СМЕЩ(C4;-СЧЁТЗ(A$4:B20);));СМЕЩ(B4;-СЧЁТЗ(A$4:A20);));A4)
Код
=ЕСЛИ(A4=0;ЕСЛИ(СМЕЩ(B5;-СЧЁТЗ(A:A);)=0;ЕСЛИ(СМЕЩ(C6;-СЧЁТЗ(A:B);)=0;СМЕЩ(D7;-СЧЁТЗ(A:C););СМЕЩ(C6;-СЧЁТЗ(A:B);));СМЕЩ(B5;-СЧЁТЗ(A:A);));A4)
Код
=ВЫБОР(СЧЁТ(LN(СТРОКА(Z1)-СЧЁТЕСЛИ(СМЕЩ(A$4;;;99;{1;2;3});"<>")))+1;A4;СМЕЩ(B5;-СЧЁТЗ(A:A););СМЕЩ(C6;-СЧЁТЗ(A:B););СМЕЩ(D7;-СЧЁТЗ(A:C);))
Код
=ЕСЛИ(A4=0;СМЕЩ(A4;-ПРОСМОТР(СТРОКА()-4;СЧЁТЕСЛИ(СМЕЩ(A$4;;;99;{1;2;3});"<>"));СЧЁТ(LN(СТРОКА(Z1)-СЧЁТЕСЛИ(СМЕЩ(A$4;;;99;{1;2;3});"<>"))));A4)
А у БМВ можно в формуле $ лишние убрать, так очень красиво получится. Всего 97 символов.
*Я не подмазываюсь, просто убрал лишнее. 95 93 символа:
Код
=ДВССЫЛ(ТЕКСТ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D12>0;--(СТРОКА($4:12)&-СТОЛБЕЦ(A:D)));СТРОКА(A1));"RДCМ");)
Изменено: Светлый - 02.06.2019 20:55:36
 
Цитата
Светлый написал:
А у БМВ можно $ лишние убрать, так очень красиво получится
Нет у меня лишних $.  :(   :D
Светлый, Ну это в данном случае не относится к методу, так косметика. мне вааще трудно,  у меня и эта
=INDIRECT(TEXT(SMALL(IF($A$4:$D$12<>"";--(ROW($4:$12)&-COLUMN($A:$D)));ROW(A1));"RДCМ");) - 91 символ :)
Изменено: БМВ - 02.06.2019 15:32:49
По вопросам из тем форума, личку не читаю.
 
Ну и совместными усилиями с небольшим моим вкладом получаем 93 и 89 символов:
Код
=ДВССЫЛ(ТЕКСТ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D12>0;3+(СТРОКА($1:9)&-ЛЕВБ(A$3:D$3)));СТРОКА(A1));"RДCМ");)
Код
=ДВССЫЛ(ТЕКСТ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D12>0;3+(СТРОКА($1:9)&-{1;2;3;4}));СТРОКА(A1));"RДCМ");)
 
У меня такое вышло. =ИНДЕКС($A$1:$D$12;ОСТАТ(НАИМЕНЬШИЙ(ЕСЛИ($A$4:$D$12<>0;СТОЛБЕЦ($A$4:$D$12)+СТРОКА($A$4:$D$12)/100;99^9);СТРОКА()-3);1)*100;ЦЕЛОЕ(НАИМЕНЬШИЙ(ЕСЛИ($A$4:$D$12<>0;СТОЛБЕЦ($A$4:$D$12)+СТРОКА($A$4:$D$12)/100;99^9);СТРОКА()-3)/1))
Пытался через ДВССЫЛ сделать, но не вышло....
 
Цитата
Светлый написал:
получаем 93 и 89 символов
можно еще пару символов отжать, 87:
Код
=ДВССЫЛ(ТЕКСТ(АГРЕГАТ(15;6;(СТРОКА($4:12)&-{1;2;3;4})/(A$4:D12>0);СТРОКА(A1));"RДCМ");)
 
Стало быть мой вариант с 16ричной системой счисления самый новаторский:)
 
Цитата
Akropochev написал:
новаторский:)
при этом до того что при открытии файла Excel 2016 не перевел функции в Dec2Hex И Hex2Dec.
Akropochev, это относительно новые функции и не всем доступны.
По вопросам из тем форума, личку не читаю.
 
Цитата
Akropochev написал:
мой вариант с 16ричной системой счисления самый новаторский:)
Подобный подход я видел здесь:
правда бралось основания не 16, а 36, это может покрыть значительно больший диапазон ячеек нежели чем через 16-ти ричную систему
Изменено: MCH - 03.06.2019 08:04:04
 
MCH, изначальная задачка вообще отсюда :)
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
изначальная задачка вообще  отсюда
Исходная задача в "Избушке" датирована 2010 годом.

Я задачи (по указанной ссылке) не видел, и до решения дошел сам.
Но т.к. подобные решения возникли у многих, то значит работает еще серое вещество
Изменено: MCH - 03.06.2019 13:22:42
 
Решение через 36-ричную систему счисления (работает не во всех версиях)
116 (можно ужать на несколько символов, но не стал, чтобы было универсально):
Код
=ДВССЫЛ(ОСНОВАНИЕ(НАИМЕНЬШИЙ(ЕСЛИ(A$4:D$12<>"";ДЕС(АДРЕС(СТРОКА(A$4:D$12);СТОЛБЕЦ(A$4:D$12);4);36));СТРОКА(A1));36))
Изменено: MCH - 03.06.2019 13:40:03
Страницы: Пред. 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 След.
Наверх