В Excel у меня есть 2 столбца. Я хочу отсортировать второй в алфавитном порядке, сохраняя (собственный) порядок в первом (подумайте std::stable_sort, где равенство основано только на первом столбце) Пример:

dsf   k
www   d
www   a
azd   q
azd   e
azd   b

должен стать

dsf   k
www   a
www   d
azd   b
azd   e
azd   q

Мастер сортировки, похоже, не имеет опции "сохранить текущий порядок". Я мог бы определить пользовательский порядок, но у меня есть более тысячи различных элементов; это было бы настоящей болью, и этот заказ может измениться в любое время.

3 ответа3

1

Я предполагаю, что ваши данные начинаются со строки 2, а столбец C доступен для использования в качестве «вспомогательного столбца».  Положил

=IF(A1=A2, C1, C1+1)

в клетку C2 .  (Если столбец C недоступен, используйте тот, который есть.  Если ваши данные начинаются со строки 1, вставьте пустую строку или (все еще) поместите вышеуказанное в ячейку C2 , но поместите 1 в ячейку C1 .)  Перетащите / заполните.  Это (столбец C) теперь «документирует» ваш заказ; например, C2 = 1, C3 = C4 = 2 и C5 = C6 = C7 = 3.  Теперь сортируйте по столбцу C и столбцу B

0

Я думаю, что вам лучше всего использовать индивидуальные заказы. Если его не нужно часто обновлять, вы можете сделать это через FILE>OPTIONS>ADVANCED>EDIT CUSTOM LISTS... и просто импортировать весь диапазон. Затем используйте это при сортировке.

VBA решение будет что-то вроде

Sub sort()
Dim iCustListNum As Integer

iCustListNum = Application.CustomListCount + 1
Application.AddCustomList ListArray:=Range("A2:A100")

On Error GoTo err:

'Sort your list
Range("A1:B100").sort Key1:=Range("A1"), Order1:=xlAscending, OrderCustom:=iCustListNum, _
    Key2:=Range("B1"), Order2:=xlAscending, Header:=xlYes, _
    MatchCase:=False, Orientation:=xlTopToBottom

'Clean up
err:
Application.DeleteCustomList ListNum:=iCustListNum

End Sub
0

Быстро и грязно:-

  1. Скопируйте содержимое столбца А в блокнот, затем скопируйте его в буфер обмена.
  2. Выберите оба столбца.
  3. Выберите функцию сортировки и сортируйте столбец A, используя порядок "пользовательских списков".
  4. Введите данные из буфера обмена в пользовательский список.
  5. Добавьте уровень в функцию сортировки, а затем сортируйте по столбцу B, "от наименьшего к наибольшему".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .