Группировать и сортировать строки таблицы

733
John Doe

У меня есть таблица, где столбец Aсодержит уникальное значение в каждой ячейке. Столбец Bлибо пуст, либо содержит номер.

 | A | B  ---+---------+--- 1 | Gamma | 1  2 | Echo | 5  3 | Alpha |  4 | Foxtrot | 3  5 | Bravo |  6 | Charlie | 1  7 | Delta |  

Я хотел бы отсортировать таблицу так, чтобы строки с непустым значением в Bстолбце появлялись раньше, чем строки с пустым в этом столбце. Строки с непустыми значениями Bтакже должны быть отсортированы в алфавитном порядке по столбцам A. Порядок сортировки других строк не имеет значения.

Результат должен выглядеть примерно так:

 | A | B  ---+---------+--- 1 | Charlie | 1  2 | Echo | 5  3 | Foxtrot | 3  4 | Gamma | 1  5 | Alpha |  6 | Bravo |  7 | Delta |  

На данный момент пустые ячейки в столбце Bполностью пусты, даже не содержат формулы, которая оценивается как пустая строка. В будущем это, вероятно, изменится. Я не знаю, повлияет ли это на какие-либо ответы.

2
Пока что лучшее, что я смог придумать, - это отсортировать по столбцу с числами (столбец B), скрыть все пустые строки, а затем отсортировать по алфавиту столбец A. Кажется, что это единственный вариант, если у кого-то нет чего-то, что работает на него. John Doe 6 лет назад 0

4 ответа на вопрос

1
robinCTS

Там нет на самом деле нет-скрытия-строк, не-фильтрации, одного решения -sort. Для этого нужно просто добавить формулу условного форматирования в столбец B:

Worksheet Screenshot showing Conditional Formatting Rules

Выберите B2:B8, убедившись, что B2это активная ячейка, и добавьте новое правило условного форматирования формулы. Измените цвет шрифта правила на любой другой, Automaticи введите следующее в качестве формулы:

=B2="" 

Обратите внимание, что хотя отображается строка заголовка, она не обязательна. (См. Примечания внизу моего другого ответа для получения дополнительной информации.)


Теперь все, что вам нужно сделать, чтобы получить желаемый результат, это двухуровневая сортировка:

Worksheet Screenshot showing Sort Order

  1. Сортировать по столбцу Bв Font ColorпорядкеAutomatic On Top
  2. Сортировать по столбцу Aв ValuesпорядкеA to Z

Тот же эффект может быть достигнут при использовании цвета заливки вместо цвета шрифта для правила условного форматирования и сортировки по Cell Color. (Используя цвет шрифта, проще не делать видимых изменений для данных. Я использовал красный, чтобы это было очевидно на скриншоте, но лучший цвет для общего случая - черный.)


Обратите внимание, что сортировка может быть доступна либо через меню DataSort & FilterSort, ярлык Alt+ A+ S, либо из любого раскрывающегося списка внутри ячейки, когда включен режим фильтра ( Alt+ A+ T) (при условии, конечно, есть строка заголовка, пусто или нет, так как иначе нельзя гарантировать правильную работу сортировки):

Worksheet Screenshot showing how to access Custom Sort from In-cell Dropdown


По сути, сортировка по цвету добавляет функцию группировки при сортировке, аналогичную той, что доступна в SQL.

Эта группировка может быть довольно сложной, включая использование нескольких столбцов для критериев, при этом все же требуется только двухуровневая сортировка. Даже «вложенные» группировки могут быть выполнены - они просто требуют дополнительных уровней сортировки.

Это замечательно! Я не знал об этом. Scott 6 лет назад 1
1
robinCTS

Вот решение без скрытия строк, без фильтрации, без вспомогательных столбцов, без условного форматирования, с двумя сортировками, с тремя шагами, о которых я упоминал в комментарии к самоответу ОП. Было подтверждено, что работает в Excel 2007.

Шаг 1

Сортировка по столбцам Bпо Valuesзаказу Smallest to Largest:

Скриншот рабочего листа с первой сортировкой

Обратите внимание, что хотя отображается строка заголовка, она не обязательна. (См. Примечания для получения дополнительной информации.)

Шаг 2

Выделите верхнюю часть таблицы до последней строки с непустым значением в столбце B. Для примера таблицы это будет A1:C5.

Лучший способ сделать это для большого количества строк и / или столбцов (но одинаково хорошо подходит для небольших таблиц и избежать прокрутки вручную или с помощью мыши) - это следующая комбинация клавиш, начиная с любой непустой ячейки в Bстолбце :

  • Ctrl+ Down;
  • Ctrl+ Rightстолько раз, сколько требуется, чтобы добраться до самого правого столбца таблицы (или просто удерживайте его, чтобы добраться до правого края листа);
  • ( Ctrl+ Leftесли вы выходите за пределы и попадаете в начало следующей таблицы или в самый правый столбец листа);
  • Ctrl+ Shift+ Home;

Если справа от таблицы нет других данных, вместо этого можно использовать эту альтернативную последовательность:

  • Ctrl+ Down;
  • Ctrl+ Shift+ Up;
  • Shift+Space

Шаг 3

Сортировка по столбцам Aпо Valuesзаказу A to Z:

Скриншот рабочего листа, показывающий вторую сортировку


Заметки:

  • Сортировка на шаге 1 может быть выполнена либо с помощью пункта меню DataSort & FilterSort(или его сочетания клавиш Alt+ A+ S ), либо из раскрывающегося списка внутри ячейки, когда включен режим фильтрации (если, конечно, есть строка заголовка).
  • Сортировка по шагу 3 может быть выполнена только через пункт меню.
  • Этот метод гарантированно работает, даже если данные таблицы начинаются со строки 1и не имеют строки заголовка. Только два моих решения (плюс ОП, конечно) будут работать в этом случае. Фактически, эти решения являются единственными, которые будут работать или даже могут работать для 1таблицы строк без заголовка, если первая ячейка столбца Bпуста.
  • Он также будет работать независимо от состояния режима фильтра. (Если, конечно, таблица не содержит заголовков, начинается в первой строке, и по какой-то причине режим фильтра включен. В этом случае отключите его и оставьте его уже!)
: D Я чувствую, что решение введено: Но вам все равно нужно вручную выбрать только часть таблицы. Это будет с помощью прокрутки, если это большой стол и ячейки не пусты. Но теперь я могу объяснить, почему я «предпочитаю» описывать свою альтернативу, а не другие: мое решение не изменится или ему потребуется больше времени для выполнения, когда наборы данных станут больше. И для этого не нужно использовать вспомогательные столбцы. Чтобы дать вам кредит: мне нравится разнообразие ваших идей! :) Итак, давайте закроем нашу дискуссию сейчас, хорошо ?! Albin 6 лет назад 0
Прокрутка * не * требуется в больших таблицах для этого решения (в отличие от других). Для этого требуется всего три сочетания клавиш. Nor Кроме того, ему не нужно «менять» * (???) или * «нужно больше времени для выполнения» * (???), когда набор данных становится больше. Также не используются * "вспомогательные" * (вспомогательные?) Столбцы. … ¹ Даже если столбец `B` - это другой столбец справа, например, ZZ: ZZ. В этом случае последовательность `Ctrl` +` G`; `ZZ: ZZ`; `Enter` доставит вас туда. (Обратите внимание, что этот случай будет влиять на это решение * меньше *, чем на некоторые другие решения.)… ² Чуть более трех при *** очень *** необычных обстоятельствах. robinCTS 6 лет назад 0
Итак, вы не хотите заканчивать дебаты. Итак, сначала я хотел бы проверить, какова ваша цель здесь? Вы просто хотите услышать, что вы правы, или вы действительно заинтересованы в этом вопросе, поэтому готовы * и мотивированы * обсудить его? Albin 6 лет назад 0
0
John Doe

Кажется, что нет способа делать то, что я хочу, строго через сортировку, но вот что работает для меня:

  1. Сортировать строки по столбцу B от малого к большому

  2. Скрыть все строки, которые не имеют значения в столбце B

  3. Сортировать строки по столбцу А по алфавиту

В качестве альтернативы скрытию строк на шаге (2) вы можете просто выбрать часть таблицы, которая * имеет * значения в столбце `B`. Сортировка на шаге (3) будет производиться только в выбранной вложенной таблице (при условии, что вы сортируете через «Данные» → «Сортировка и фильтрация» → «Сортировка», а не из выпадающего меню «Режим фильтра в ячейке»). Преимущество этого метода в том, что вы не получите скрытых строк. (Это может или не может быть проблемой в вашем конкретном случае.) robinCTS 6 лет назад 0
Я думал, что уже пробовал, и он все еще сортировал всю таблицу, даже не подсвеченную область. John Doe 6 лет назад 0
Я только попробовал в Excel 2007, но я ожидаю, что он все еще должен работать для более поздних версий. Можете ли вы подтвердить, работает ли она с вашей версией Excel? robinCTS 6 лет назад 0
есть ли причина, по которой вы не «скрываете» скрытые строки? Albin 6 лет назад 0
Я не скрываю строки в данный момент, потому что я использую этот файл для управления коллекцией; Я делаю правки в файле, и меня интересуют только те строки, в которых я использую элементы коллекции. John Doe 6 лет назад 0
-2
Albin

Одним из решений было бы объединить сортировку и фильтрацию. Лучше всего, если у вас есть заголовки столбцов в первой строке, но они не обязательно нужны.

Это не просто сортировка, как вы просили, она использует фильтр. Но вы можете просто «выбрать» всю таблицу (собственно, включение режима фильтра сделает это за вас), выполнить шаги и вуаля. Также довольно легко «конвертировать» его в макрос. Что касается других решений, это решение не требует, чтобы вы скрывали (или «отменяли») нежелательные строки вручную. Также вам не нужно вводить дополнительную формулу (посредством условного форматирования столбца A или B или путем добавления другого столбца).

Во всяком случае здесь это идет:

Включите фильтр:

  • выберите любую ячейку в своем списке и включите режим фильтра (на ленте вы найдете ее на вкладке «Данные», она должна называться «Фильтр»). Вы увидите маленький треугольник в первом ряду каждого столбца, который вы используете

    (примечание: если у вас нет заголовков столбцов, просто добавьте пустую строку в самом начале и выберите все используемые столбцы вручную, в данном случае A и B, вместо «просто» выбора ячейки в списке)

Переместите строки без значения B в конец списка:

  • сортировать столбец B в порядке возрастания (нажав небольшую треугольную кнопку в первом ряду столбца B и выбрав сортировку по значению по возрастанию)

Сортировать колонку А и отключить / удалить фильтр

  • отфильтровать строки с пустыми ячейками в столбце B (снова щелкнув по треугольной кнопке и сняв флажок со значения «пусто» в нижней части списка)
  • сортировать столбец A в порядке возрастания (аналогично сортировке столбца B)
  • отключить расширенную фильтрацию (так же, как вы ее включили), это автоматически удалит фильтр для пустых ячеек в столбце B

Это должно дать вам правильный результат, насколько я вас понял. Вам также не нужно будет скрывать строки вручную, Excel скроет все строки за вас.

(обратите внимание, что скрытие строк вручную отличается от использования фильтра для «скрытия» их)

что-нибудь, что я мог бы улучшить, чтобы я избавился от отрицательных голосов? предложения приветствуются! Albin 6 лет назад 0

Похожие вопросы