Сортування списку у MS EXCEL за довжиною рядка

Є список (діапазон) з текстовими значеннями, потрібно відсортувати його за зменшенням довжини рядка.

У стовпціА є список, у сусідньому стовпці наведено той самий список, але відсортований за довжиною рядка (див. файл прикладу).

довжиною

Для отримання відсортованого списку використовується формула масиву та екстравагантний підхід.

Формула для сортування: =ЯКІ ПОМИЛКА(ІНДЕКС(Список; ПОШУКПОЗ(Найбільший((ДЛСТР(Список)&","&СТРОКА(Список))*1; ЧСТРОК(B$1:$B1))) ;(ДЛСТР(Список)&","&РЯДОК(Список))*1;0));"")

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

У файлі прикладу також наведено інший варіант – з двома службовими стовпцями та формулою масиву.

ПОРАДА: При розборі формул не забувайте користуватися клавішеюF9.