Создать столбец идентификатора сортировки, как если бы каскадная сортировка двух столбцов данных в excel

У меня есть два столбца: Days и Value. Попытка создать формулу Excel для заполнения третьего столбца с идентификатором, в котором будет находиться эта строка, если бы каскадно отсортировать два столбца. Сначала по значению (от меньшего к большему), а затем по дням (от большего к меньшему)

Дни Ценить Желаемый_выход 2500 0,01 7 1 0,01 6 500 2 4 100 1 5 1 100 3 2500 9300 2 1 9300 1

Демонстрационные данные в значительной степени уже отсортированы по мере необходимости, но в реальном файле значения находятся повсюду. Позиция идентификатора по существу должна быть столбцом приоритета. Хотя таблица на самом деле не может быть отсортирована на этом конкретном листе.

Это казалось близким, но не могло изменить его соответствующим образом. https://answers.microsoft.com/en-us/msoffice/forum/all/excel-formula-to-track-a-sort-position/b8efbfa5-7ed9-4272-8f3c-ddfe04c00cb7

Обновлено: у меня были желаемые значения идентификатора сортировки в обратном порядке.

Каким должен быть результат, если две или более записей имеют одинаковые значения в столбцах «Дни» и «Значение»?

Jos Woolley 15.04.2023 07:54
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
1
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

с Office 365 мы можем использовать sort для сортировки массива, а затем сопоставлять, чтобы найти, где он находится:

=MATCH(A2&"|"&B2,BYROW(SORT(FILTER($A$2:$B$10000,$A$2:$A$10000<>""),{2,1},{-1,1}),LAMBDA(a,TEXTJOIN("|",,a))),0)


И просто чтобы пофантазировать, мы можем расплескать результаты вместо того, чтобы копировать формулу:

=LET(
    rng,FILTER($A$2:$B$10000,$A$2:$A$10000<>""),
    srt,SORT(rng,{2,1},{-1,1}),
    rng_brw,BYROW(rng,LAMBDA(a,TEXTJOIN("|",,a))),
    srt_brw,BYROW(srt,LAMBDA(a,TEXTJOIN("|",,a))),
    MATCH(rng_brw,srt_brw,0))

Спасибо @ScottCraner!! Ваш ответ потрясающий!! У меня была ошибка в моем вопросе, и я просто отредактировал таблицу. Можно ли использовать ваше решение, но изменить порядок идентификаторов? (Поэтому при сортировке столбца идентификаторов строка с 2500 – 0,01 находится вверху, а строка 1–9300 — внизу.)

Ben.Name 14.04.2023 18:56

@Ben.Name не следует редактировать свой вопрос после получения ответов. Это делает ответы недействительными и открывает ответы для отрицательных голосов, потому что теперь их ответ не соответствует вопросу. Обычно кто-то пытался решить проблему самостоятельно, а если не мог, то задавал другой вопрос. Так что в будущем имейте это в виду. Я отредактирую сообщение через минуту, чтобы внести изменения, так как это простая настройка.

Scott Craner 14.04.2023 18:59

Понял. Я понял это и принял ответ. -Спасибо. Изменено {2,1},{1,-1} на {2,1},{-1,1}

Ben.Name 14.04.2023 19:01

Альтернативное решение без использования LAMBDA, но также требующее Office 365:

=LET(range,  A2:B8,
     seq,    SEQUENCE(ROWS(range)),
     srt,    TAKE(SORT(HSTACK(seq,range),{3,2},{-1,1}),,1),
XMATCH(seq,srt))

srt сортирует строки по значениям от наименьшего к наибольшему и по дням от наибольшего к наименьшему.

Тогда он соответствует позиции строки в srt.

элегантное решение!

David Leal 14.04.2023 23:33

Другие вопросы по теме