Формула Excel: сортировка текста и чисел с помощью формулы -

Общая формула

=COUNTIF(data,"<="&A1)+(COUNT(data)*ISTEXT(A1))

Резюме

Для динамической сортировки данных по числам и тексту в алфавитном порядке вы можете использовать формулу для создания числового ранга во вспомогательном столбце, а затем использовать ИНДЕКС и ПОИСКПОЗ для отображения значений на основе ранга. В показанном примере формула в C5:

=COUNTIF(data,"<="&B5)+(COUNT(data)*ISTEXT(B5))

где «данные» - именованный диапазон B5: B13.

Объяснение

Эта формула сначала генерирует значение ранга, используя выражение, основанное на СЧЁТЕСЛИ:

=COUNTIF(data,"<="&B5)

что более подробно объясняется здесь. Если данные содержат все текстовые значения или все числовые значения, ранг будет правильным. Однако, если данные включают и текст, и числа, нам нужно «сместить» ранг всех текстовых значений, чтобы учесть числовые значения. Это делается с помощью второй части формулы здесь:

+(COUNT(data)*ISTEXT(B7))

Здесь мы используем функцию COUNT, чтобы получить количество числовых значений в данных, затем умножаем результат на логический результат ISTEXT, который проверяет, является ли значение текстом, и возвращает TRUE или FALSE. Это эффективно отменяет результат COUNT, когда мы работаем с числом в текущей строке.

Обработка дубликатов

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

=COUNTIF(data,"<"&B5)+(COUNT(data)*ISTEXT(B5))+COUNTIF($B$5:B5,B5)

Эта версия регулирует логику начальной функции СЧЁТЕСЛИ и добавляет еще СЧЁТЕСЛИ с расширяющейся ссылкой для увеличения дубликатов.

Отображение отсортированных значений

Для извлечения и отображения значений отсортированных значений в алфавитном порядке с использованием вычисленного значения ранга E5 содержит следующие формулы ИНДЕКС и ПОИСКПОЗ:

=INDEX(data,MATCH(ROWS($E$5:E5),rank,0))

где «данные» - это именованный диапазон B5: B13, а «ранг» - именованный диапазон C5: C13.

Для получения дополнительной информации о том, как работает эта формула, см. Пример здесь.

Работа с пробелами

Пустые ячейки будут генерировать нулевой ранг. Предполагая, что вы хотите игнорировать пустые ячейки, это работает нормально, потому что приведенная выше формула ИНДЕКС и ПОИСКПОЗ начинается с 1. Однако вы увидите ошибки # Н / Д в конце отсортированных значений, по одной для каждой пустой ячейки. Простой способ справиться с этим - заключить формулы ИНДЕКС и ПОИСКПОЗ в ЕСЛИОШИБКА следующим образом:

=IFERROR(INDEX(data,MATCH(ROWS($E$5:E5),rank,0)),"")

Интересные статьи...