powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Задачка
20 сообщений из 20, страница 1 из 1
Задачка
    #34336846
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недавно была одна задачка, с которой никто у нас можно сказать до конца не справился!
Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов!
Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце.
В прилагаемом файле есть пример и найденные варианты решения.
...
Рейтинг: 0 / 0
Задачка
    #34337309
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже я никого не заинтересовал! А может я там глупостей каких понаписал?
...
Рейтинг: 0 / 0
Задачка
    #34337927
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой ранг, какое смещение?
Вот тебе старая дедушкина трехлинейка ;)
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<="&$B14)-СЧЁТЕСЛИ($B13:$B$ 14 ;$B14)
Делов то...
...
Рейтинг: 0 / 0
Задачка
    #34338149
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaranagaКакой ранг, какое смещение?
Вот тебе старая дедушкина трехлинейка ;)
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<="&$B14)-СЧЁТЕСЛИ($B13:$B$ 14 ;$B14)
Делов то...

Может я загонный, но скажу - я голову ломал целую неделю, неужели ты думаешь всё так просто?
Всё что ты выше написал равносильно - присвоить номера по порядку, а в условии если почитать, а также в примерах решения - одинаковые значения должны иметь одинаковое место, т.е. если есть три значения "4", то им всем присваивается место "X", а не "X","X+1","X+2" как в твоём примере. И если следующее значение после "4", идёт "5", то ему присваивается "X+1", а не "X+3" как функция РАНГ().
...
Рейтинг: 0 / 0
Задачка
    #34338152
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда еще проще:
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<="&$B14)
В жизни все всегда несколько проще, чем кажется на первый взгляд ;)
...
Рейтинг: 0 / 0
Задачка
    #34338153
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее так:
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<"&$B14)
...
Рейтинг: 0 / 0
Задачка
    #34338165
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Taranagaточнее так:
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<"&$B14)

Я согласен, что зачастую решение бывает очень простым!
Но конкретно в этом случае у тебя не учитываются повторения предыдущих значений, т. е. если "4" повторялось три раза и было и имело место "X", то значению "5", по твоей формуле будет присвоено "Х+3", а нужно "Х+1". Я же уже об этом писал. Посмотри в выложенном файле там из примеров видно, если конечно есть желание...
...
Рейтинг: 0 / 0
Задачка
    #34338214
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadНедавно была одна задачка, с которой никто у нас можно сказать до конца не справился!
Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов!
Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце.
В прилагаемом файле есть пример и найденные варианты решения.
Вроде так
...
Рейтинг: 0 / 0
Задачка
    #34338230
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз перечитал условие, вывехнул моск, раскаялся, пашел пить пиво...
Кста, а условие задачи позволяет пользоваться стандартной сортировкой?
Хотя, весьма вероятно, если бы позволяло, то и задачи никакой бы не было...
...
Рейтинг: 0 / 0
Задачка
    #34338320
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadНедавно была одна задачка, с которой никто у нас можно сказать до конца не справился!
Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов!
Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце.
В прилагаемом файле есть пример и найденные варианты решения.

В одном столбце можно, а нужно ли - судить тебе:

1-й способ
=СТРОКА(B14)-СТРОКА($B$13)
=СМЕЩ($D$13;РАНГ(B14;$B$14:$B$65536;1);0)


время пересчета в 1000 ячеек: 106,87 миллисек.
летучая (пересчет при любом изменении на листе): да
вспомогательные ячейки: да

2 -й способ
=ЕСЛИ(ЕНД(ПОИСКПОЗ(B14;$B$13:B13;0));СЧЁТЕСЛИ($B$14:$B$44;"="&B14)-1;0)
=СЧЁТЕСЛИ($B$14:$B$44;"<="&B14)-СУММЕСЛИ($B$14:$B$44;"<="&B14;$N$14:$N$44)


время пересчета в 1000 ячеек: 302,75 миллисек.
летучая (пересчет при любом изменении на листе): нет
вспомогательные ячейки: да

3-й способ
Матричная формула (ввод через CTRL+SHIFT+ENTER)
=ПОИСКПОЗ(B14;НАИМЕНЬШИЙ(ЕСЛИ(ЧАСТОТА($B$14:$B$44;$B$14:$B$44)>0;$B$14:$B$44);СТРОКА($B$14:$B$44)-СТРОКА($B$14)+1))

время пересчета в 1000 ячеек: 13191,72 миллисек.
летучая (пересчет при любом изменении на листе): нет
вспомогательные ячейки: нет

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Задачка
    #34338362
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
talgat DeggasadНедавно была одна задачка, с которой никто у нас можно сказать до конца не справился!
Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов!
Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце.
В прилагаемом файле есть пример и найденные варианты решения.
Вроде так

Всё так, если значения отсортированы, а они не отсортированы! Что то похожее как раз и используется в первом предложенном решении (смотри файл приложенный в начале) там сначала все места сортируются по возростанию а потом возвращаются в исходную строчку, но это уже получается дополнительный столбец.
...
Рейтинг: 0 / 0
Задачка
    #34338369
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)

3-й способ
Матричная формула (ввод через CTRL+SHIFT+ENTER)
=ПОИСКПОЗ(B14;НАИМЕНЬШИЙ(ЕСЛИ(ЧАСТОТА($B$14:$B$44;$B$14:$B$44)>0;$B$14:$B$44);СТРОКА($B$14:$B$44)-СТРОКА($B$14)+1))

время пересчета в 1000 ячеек: 13191,72 миллисек.
летучая (пересчет при любом изменении на листе): нет
вспомогательные ячейки: нет

KL
[MVP - Microsoft Excel]

Но ведь можно же оказалось, А!!! Класс
А чем черевато что не летучая???
Вы свё время про это говорите, нужно ли чтобы она пересчитывалась при любых изменениях
Ведь если исходные данные меняешь она же пересчитывает.
...
Рейтинг: 0 / 0
Задачка
    #34338714
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadА чем черевато что не летучая???
Вы свё время про это говорите, нужно ли чтобы она пересчитывалась при любых изменениях
Ведь если исходные данные меняешь она же пересчитывает.В абсолютном большинстве случаев нелетучая формула - лучше , так как пересчитывается только при изменениях в ячейках, задействованных, прямо или косвенно, в данной конкретной формуле.

Как я уже сказал ранее, летучая формула пересчитывает при любых изменениях на листе независимо от того, влияет ли изменение на результат или нет .

Летучесть обычно нужна, когда изменение влияющее на результат не провоцирует события Calculate (пересчет) автоматически как это было в формуле с XLM в другой теме.

Все формулы использующие функции СЛЧИС(); ТДАТА(); СЕГОДНЯ(); СМЕЩ(); ЯЧЕЙКА(); ДВССЫЛ(); ИНФОРМ(); ЯЧЕЙКА("Filename") летучи по определению.

Формулы также могут становиться летучими из-за превышения лимита в 65.536 зависимостей или в результате использования пользовательских функций (UDF) содержащих инструкцию Application.Volatile=True

Подробно о летучести в Excel можно прочесть здесь: http://www.decisionmodels.com/calcsecretsi.htm

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Задачка
    #34338837
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант в два столбца, довольно быстрый (120,24 миллисек. в 1000 ячеек) и не летучий:

=ЕСЛИ(СЧЁТЕСЛИ(B14:$B$14;B14)<2;B14)
=РАНГ(B14;$I$14:$I$44;1)


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Задачка
    #36042198
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давно не был на этом форуме.... вот забрёл... поискал интересные задачки и напоролся на эту

Вот ещё одно решение, при чём довольно быстрое, не смотря на страшную форму записи

{=РАНГ(B14;$B$14:$B$44;-1)-(СУММ(--((ЧАСТОТА(РАНГ($B$14:$B$44;$B$14:$B$44;-1);СТРОКА($B$13:ИНДЕКС($B$13:$B$43;РАНГ(B14;$B$14:$B$44;-1)))-СТРОКА($B$13)))=0))-1)}
По скорости оно примерно равно варианту KLя в предыдущем посте
...
Рейтинг: 0 / 0
Задачка
    #36042215
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
случайно отправило и не дало закончить фразу:
, если его разложить с использованием 2х промежуточных столбцов)
...
Рейтинг: 0 / 0
Задачка
    #36042372
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A-NikПо скорости оно примерно равно варианту KLя в предыдущем посте - забираю свои слова обратно !
Даже если его разложить с использованием 2х промежуточных столбцов
Как всегда поторопился с оценкой
...
Рейтинг: 0 / 0
Задачка
    #36042582
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно, что эта тема всплыла, до сих пор не пойму как так получилось, что ранг по нормальному посчитать в экселе настолько сложно. Неужели всех устраивает то, что делает стандартная функция()?
...
Рейтинг: 0 / 0
Задачка
    #36042683
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему же сложно ? Вон КЛ привёл пару не сложных вариантов решения :))
...
Рейтинг: 0 / 0
Задачка
    #36047163
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikПочему же сложно ? Вон КЛ привёл пару не сложных вариантов решения :))
но с промежуточным столбцом. Это исключалось в условиях первоначальной задачи
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Задачка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]