Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Задачка / 20 сообщений из 20, страница 1 из 1
16.02.2007, 15:24:47
    #34336846
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
Недавно была одна задачка, с которой никто у нас можно сказать до конца не справился!
Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов!
Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце.
В прилагаемом файле есть пример и найденные варианты решения.
...
Рейтинг: 0 / 0
16.02.2007, 17:10:42
    #34337309
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
Похоже я никого не заинтересовал! А может я там глупостей каких понаписал?
...
Рейтинг: 0 / 0
16.02.2007, 22:41:17
    #34337927
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
Какой ранг, какое смещение?
Вот тебе старая дедушкина трехлинейка ;)
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<="&$B14)-СЧЁТЕСЛИ($B13:$B$ 14 ;$B14)
Делов то...
...
Рейтинг: 0 / 0
17.02.2007, 11:40:18
    #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
17.02.2007, 11:44:03
    #34338152
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
тогда еще проще:
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<="&$B14)
В жизни все всегда несколько проще, чем кажется на первый взгляд ;)
...
Рейтинг: 0 / 0
17.02.2007, 11:44:50
    #34338153
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
точнее так:
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<"&$B14)
...
Рейтинг: 0 / 0
17.02.2007, 11:55:36
    #34338165
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
Taranagaточнее так:
Код: plaintext
=СЧЁТЕСЛИ($B$ 14 :$B$ 44 ;"<"&$B14)

Я согласен, что зачастую решение бывает очень простым!
Но конкретно в этом случае у тебя не учитываются повторения предыдущих значений, т. е. если "4" повторялось три раза и было и имело место "X", то значению "5", по твоей формуле будет присвоено "Х+3", а нужно "Х+1". Я же уже об этом писал. Посмотри в выложенном файле там из примеров видно, если конечно есть желание...
...
Рейтинг: 0 / 0
17.02.2007, 12:57:11
    #34338214
talgat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
DeggasadНедавно была одна задачка, с которой никто у нас можно сказать до конца не справился!
Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов!
Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце.
В прилагаемом файле есть пример и найденные варианты решения.
Вроде так
...
Рейтинг: 0 / 0
17.02.2007, 13:12:48
    #34338230
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
Еще раз перечитал условие, вывехнул моск, раскаялся, пашел пить пиво...
Кста, а условие задачи позволяет пользоваться стандартной сортировкой?
Хотя, весьма вероятно, если бы позволяло, то и задачи никакой бы не было...
...
Рейтинг: 0 / 0
17.02.2007, 14:32:40
    #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
17.02.2007, 15:22:56
    #34338362
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
talgat DeggasadНедавно была одна задачка, с которой никто у нас можно сказать до конца не справился!
Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов!
Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце.
В прилагаемом файле есть пример и найденные варианты решения.
Вроде так

Всё так, если значения отсортированы, а они не отсортированы! Что то похожее как раз и используется в первом предложенном решении (смотри файл приложенный в начале) там сначала все места сортируются по возростанию а потом возвращаются в исходную строчку, но это уже получается дополнительный столбец.
...
Рейтинг: 0 / 0
17.02.2007, 15:32:52
    #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
17.02.2007, 21:37:10
    #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
18.02.2007, 01:17:45
    #34338837
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
Еще вариант в два столбца, довольно быстрый (120,24 миллисек. в 1000 ячеек) и не летучий:

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


KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.06.2009, 19:45:50
    #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
15.06.2009, 20:03:48
    #36042215
A-Nik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
случайно отправило и не дало закончить фразу:
, если его разложить с использованием 2х промежуточных столбцов)
...
Рейтинг: 0 / 0
15.06.2009, 22:32:32
    #36042372
A-Nik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
A-NikПо скорости оно примерно равно варианту KLя в предыдущем посте - забираю свои слова обратно !
Даже если его разложить с использованием 2х промежуточных столбцов
Как всегда поторопился с оценкой
...
Рейтинг: 0 / 0
16.06.2009, 07:57:43
    #36042582
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
Прикольно, что эта тема всплыла, до сих пор не пойму как так получилось, что ранг по нормальному посчитать в экселе настолько сложно. Неужели всех устраивает то, что делает стандартная функция()?
...
Рейтинг: 0 / 0
16.06.2009, 09:22:35
    #36042683
A-Nik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
Почему же сложно ? Вон КЛ привёл пару не сложных вариантов решения :))
...
Рейтинг: 0 / 0
17.06.2009, 22:13:14
    #36047163
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка
A-NikПочему же сложно ? Вон КЛ привёл пару не сложных вариантов решения :))
но с промежуточным столбцом. Это исключалось в условиях первоначальной задачи
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Задачка / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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