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

history

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


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

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

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

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

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

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


Комментарии

Только для авторизованных пользователей

(только для авторизованных пользователей)

© Copyright 2013 - 2024 Excel2.ru. All Rights Reserved