|
|
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Недавно была одна задачка, с которой никто у нас можно сказать до конца не справился! Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов! Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце. В прилагаемом файле есть пример и найденные варианты решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 15:24:47 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Похоже я никого не заинтересовал! А может я там глупостей каких понаписал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 17:10:42 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Какой ранг, какое смещение? Вот тебе старая дедушкина трехлинейка ;) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 22:41:17 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
TaranagaКакой ранг, какое смещение? Вот тебе старая дедушкина трехлинейка ;) Код: plaintext Может я загонный, но скажу - я голову ломал целую неделю, неужели ты думаешь всё так просто? Всё что ты выше написал равносильно - присвоить номера по порядку, а в условии если почитать, а также в примерах решения - одинаковые значения должны иметь одинаковое место, т.е. если есть три значения "4", то им всем присваивается место "X", а не "X","X+1","X+2" как в твоём примере. И если следующее значение после "4", идёт "5", то ему присваивается "X+1", а не "X+3" как функция РАНГ(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 11:40:18 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
тогда еще проще: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 11:44:03 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
точнее так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 11:44:50 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Taranagaточнее так: Код: plaintext Я согласен, что зачастую решение бывает очень простым! Но конкретно в этом случае у тебя не учитываются повторения предыдущих значений, т. е. если "4" повторялось три раза и было и имело место "X", то значению "5", по твоей формуле будет присвоено "Х+3", а нужно "Х+1". Я же уже об этом писал. Посмотри в выложенном файле там из примеров видно, если конечно есть желание... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 11:55:36 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
DeggasadНедавно была одна задачка, с которой никто у нас можно сказать до конца не справился! Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов! Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце. В прилагаемом файле есть пример и найденные варианты решения. Вроде так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 12:57:11 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Еще раз перечитал условие, вывехнул моск, раскаялся, пашел пить пиво... Кста, а условие задачи позволяет пользоваться стандартной сортировкой? Хотя, весьма вероятно, если бы позволяло, то и задачи никакой бы не было... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 13:12:48 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
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] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 14:32:40 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
talgat DeggasadНедавно была одна задачка, с которой никто у нас можно сказать до конца не справился! Есть ряд значений которым необходимо присвоить места (порядковые номера) по возврастанию, но только без пропуска мест, т.е. если значения повторяются, то они получают одинаковые места, но следующее место не выбрасывается, как делает например функция ранг(). Причём необходимо сделать это в одном столбце (желательно стандартными формулами), без использования макросов! Несколько вариантов решения есть, но все в 2 столбца, а нужно было (или как бы это сказать - хотелось бы) в одном столбце. В прилагаемом файле есть пример и найденные варианты решения. Вроде так Всё так, если значения отсортированы, а они не отсортированы! Что то похожее как раз и используется в первом предложенном решении (смотри файл приложенный в начале) там сначала все места сортируются по возростанию а потом возвращаются в исходную строчку, но это уже получается дополнительный столбец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 15:22:56 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
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] Но ведь можно же оказалось, А!!! Класс А чем черевато что не летучая??? Вы свё время про это говорите, нужно ли чтобы она пересчитывалась при любых изменениях Ведь если исходные данные меняешь она же пересчитывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 15:32:52 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
DeggasadА чем черевато что не летучая??? Вы свё время про это говорите, нужно ли чтобы она пересчитывалась при любых изменениях Ведь если исходные данные меняешь она же пересчитывает.В абсолютном большинстве случаев нелетучая формула - лучше , так как пересчитывается только при изменениях в ячейках, задействованных, прямо или косвенно, в данной конкретной формуле. Как я уже сказал ранее, летучая формула пересчитывает при любых изменениях на листе независимо от того, влияет ли изменение на результат или нет . Летучесть обычно нужна, когда изменение влияющее на результат не провоцирует события Calculate (пересчет) автоматически как это было в формуле с XLM в другой теме. Все формулы использующие функции СЛЧИС(); ТДАТА(); СЕГОДНЯ(); СМЕЩ(); ЯЧЕЙКА(); ДВССЫЛ(); ИНФОРМ(); ЯЧЕЙКА("Filename") летучи по определению. Формулы также могут становиться летучими из-за превышения лимита в 65.536 зависимостей или в результате использования пользовательских функций (UDF) содержащих инструкцию Application.Volatile=True Подробно о летучести в Excel можно прочесть здесь: http://www.decisionmodels.com/calcsecretsi.htm KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 21:37:10 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Еще вариант в два столбца, довольно быстрый (120,24 миллисек. в 1000 ячеек) и не летучий: =ЕСЛИ(СЧЁТЕСЛИ(B14:$B$14;B14)<2;B14) =РАНГ(B14;$I$14:$I$44;1) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2007, 01:17:45 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Давно не был на этом форуме.... вот забрёл... поискал интересные задачки и напоролся на эту Вот ещё одно решение, при чём довольно быстрое, не смотря на страшную форму записи {=РАНГ(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я в предыдущем посте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 19:45:50 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
случайно отправило и не дало закончить фразу: , если его разложить с использованием 2х промежуточных столбцов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 20:03:48 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
A-NikПо скорости оно примерно равно варианту KLя в предыдущем посте - забираю свои слова обратно ! Даже если его разложить с использованием 2х промежуточных столбцов Как всегда поторопился с оценкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 22:32:32 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Прикольно, что эта тема всплыла, до сих пор не пойму как так получилось, что ранг по нормальному посчитать в экселе настолько сложно. Неужели всех устраивает то, что делает стандартная функция()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 07:57:43 |
|
||
|
Задачка
|
|||
|---|---|---|---|
|
#18+
Почему же сложно ? Вон КЛ привёл пару не сложных вариантов решения :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 09:22:35 |
|
||
|
|

start [/forum/topic.php?fid=61&fpage=193&tid=2179375]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 383ms |

| 0 / 0 |
