Как я могу перераспределить диапазон значений без дубликатов от 1 до 100? - PullRequest
0 голосов
/ 09 мая 2020

У меня есть список значений от 1 до 100, по сути, своего рода ранжирование, которое иногда пропускает несколько чисел (например, первые десять значений - 2, 6, 6, 10, 10, 10, 10, 11, 12, 13). Они упорядочены по возрастанию, поэтому каждое число будет либо больше, либо равно числу над ним. Теперь я использую sh, чтобы удалить все дубликаты из этого списка, оставаясь между 1 и 100. Так, например, для значений выше будет работать что-то вроде 2, 6, 7, 10, 11, 12, 13, 14, 15, 16 или 2, 6, 7, 8, 9, 10, 11, 12, 13, 14. Однако формулы, которые я пробовал до сих пор, будут либо go больше 100, go меньше 1, либо создавать циклические ссылки. Учитывая характер списка, вероятность того, что количество значений превысит 100, очень мала, поэтому, если такая возможность может быть учтена, это был бы приятный бонус, но это не обязательно.

Ответы [ 3 ]

0 голосов
/ 09 мая 2020

В B2, формула скопирована:

=IF(A2="","",IF((COUNTIF(B$1:B1,A2)>0)+(A2=A1),B1+1,A2))

enter image description here

Edit # 1

Если данные повторяются 100 в соответствии с комментарием OP, тогда формула B2 становится:

=IF((COUNTIF(B$1:B1,100)>0)+(A2=""),"",IF((COUNTIF(B$1:B1,A2)>0)+(A2=A1),B1+1,A2))

enter image description here

0 голосов
/ 09 мая 2020

Спасибо всем за публикацию! Благодаря первоначальному ответу Боско мне удалось повозиться и самому найти ответ. Самая большая проблема, с которой я столкнулся, заключалась в ошибке круговой формулы, но, используя формулу Боско в качестве справочного столбца, я смог все решить. Итак, решение содержит 3 разных столбца: исходные данные (столбец A), столбец справки (столбец B) и конечный результат (столбец C). В столбце справки я сделал, как было предложено, в ячейке B2 и скопировал:
=IF(A2="","",IF((COUNTIF(B$1:B1,A2)>0)+(A2=A1),B1+1,A2))
Это иногда приводило к результатам более 100, поэтому в последний столбец я поместил следующую формулу массива, которая, кстати, также учитывает для списков, содержащих более 100 записей, в C2 и скопированных:
=IF(B2="","",IF(ROW(C2)>101,ROW(C2),IF(AND(B2>=100,B3=""),100,IF($B2:$B$1000>=C3,C3-1,B2))))
В качестве формулы массива это нужно вводить с помощью Ctrl + Shift + Enter.
Большое спасибо всем, кто разместил отвечает, извините за недостаточную ясность!

0 голосов
/ 09 мая 2020

Создайте именованный диапазон для всех ваших номеров и назовите его Source. В качестве альтернативы замените именованный диапазон Source в моих формулах ниже адресом листа диапазона, в котором у вас есть ваши числа.

[C2] =INDEX(Source,MATCH(0,COUNTIF($C$1:$C1,Source),0))

Это массив формула и ее необходимо подтвердить с помощью Ctl + Shift + Введите . Обратите внимание, что диапазон СЧЁТЕСЛИ определяется одной строкой над строкой, в которой находится формула. Он сформулирован с одним абсолютным и одним относительным концом. Конец диапазона будет расширяться по мере того, как вы копируете формулу вниз.

Вы можете получить аналогичный результат, используя функцию LOOKUP (). Но поскольку MATCH () находит первый экземпляр, LOOKUP () возвращает последний. Следовательно, приведенная ниже формула вернет ту же последовательность в порядке убывания. LOOKUP () может выполнять цикл самостоятельно, и формула не требует включения массива. Просто подтвердите это обычным образом, используя только Введите .

[E2] =LOOKUP(2,1/(COUNTIF($E$1:E1,Source)=0),Source)

Обратите внимание, что диапазон результатов определяется с абсолютным и относительным концом, начиная с строку формулы, как описано выше.

...