Сортировка списка в MS EXCEL по длине строки

Имеется список (диапазон) с текстовыми значениями, нужно отсортировать его по убыванию длины строки.

В столбце А имеется список, в соседнем столбце приведен тот же список, но отсортированный по длине строки (см. файл примера).

Для получения отсортированного списка используется формула массива и экстравагантный подход.

Формула для сортировки:
=ЕСЛИОШИБКА(ИНДЕКС(Список;
ПОИСКПОЗ(НАИБОЛЬШИЙ((ДЛСТР(Список)&","&СТРОКА(Список))*1; ЧСТРОК(B$1:$B1));(ДЛСТР(Список)&","&СТРОКА(Список))*1;0));"")

  • Здесь СписокИменованный диапазон представляющий собой исходный список;
  • Так как функция ДЛСТР() всегда возвращает целое число, то конструкция (ДЛСТР(A2)&","&СТРОКА(A2))*1 формирует число, где целая часть – длина строки (текстового значения из исходного списка), а дробная – номер строки. Это позволяет сформировать массив неповторяющихся значений;
  • Функция НАИБОЛЬШИЙ() сортирует список, естественно по длине строки;
  • И наконец стандартная связка функций ИНДЕКС()+ПОИСКПОЗ() формирует сортированный список: определяет позицию значений из исходного списка в отсортированном списке, точнее конструкции ДЛСТР(A2)&","&СТРОКА(A2))*1, а затем из исходного списка выводит значение уже с учетом сортировки.

В файле примера также приведен другой вариант – с двумя служебными столбцами и формулой массива.

СОВЕТ:
При разборе формул не забывайте пользоваться клавишей F9.

Связанные статьи

Похожие задачи
Прочитайте другие статьи, решающие похожие задачи в MS Excel. Это позволит Вам решать широкий класс подобных задач.
Средняя: 3.3 (4 оценок)