
В 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
Мастер сортировки, похоже, не имеет опции "сохранить текущий порядок". Я мог бы определить пользовательский порядок, но у меня более тысячи различных элементов; это было бы настоящей головной болью, и этот пользовательский порядок может измениться в любое время.
решение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
.
решение2
Быстро и грязно:-
- Скопируйте содержимое столбца A в Блокнот, затем скопируйте его в буфер обмена.
- Выберите оба столбца.
- Выберите функцию сортировки и отсортируйте столбец A, используя порядок «пользовательского списка».
- Введите данные из буфера обмена в пользовательский список.
- Добавьте уровень к функции сортировки, а затем отсортируйте по столбцу B, «от меньшего к большему».
решение3
Я думаю, что лучше всего использовать индивидуальные заказы. Если не нужно обновлять слишком часто, можно сделать это FILE>OPTIONS>ADVANCED>EDIT CUSTOM LISTS...
и просто импортировать весь ассортимент. Затем использовать это при сортировке.
Решение VBA будет выглядеть примерно так:
Подсортировка() Dim iCustListNum как целое число iCustListNum = Application.CustomListCount + 1 Приложение.ДобавитьПользовательскийСписокМассивСписка:=Диапазон("A2:A100") При ошибке GoTo err: «Сортируйте свой список» Диапазон("A1:B100").sort Key1:=Range("A1"), Order1:=xlAscending, OrderCustom:=iCustListNum, _ Ключ2:=Диапазон("B1"), Порядок2:=xlПо возрастанию, Заголовок:=xlДа, _ MatchCase:=False, Orientation:=xlTopToBottom «Убрать» ошибка: Application.DeleteCustomList ListNum:=iCustListNum Конец субтитра