#excel #vba #vb.net #sorting #grouping
#excel #vba #vb.net #сортировка #группировка
Вопрос:
Я сталкиваюсь со следующей проблемой: у меня есть в Excel следующая база данных, и я хочу отсортировать переменную ‘Amount’ по возрастанию, принимая во внимание, что есть 3 разные группы (ГРУППА X, ЭЛЕМЕНТ ZZ И ГРУППА Z), и нужно сортировать не только группы, но и соответствующие им элементы.
- В ГРУППЕ X есть 3 разных элемента, которые нужно сортировать по возрастанию (ЭЛЕМЕНТ XA, ЭЛЕМЕНТ XB, ЭЛЕМЕНТ XC).
- ЭЛЕМЕНТ ZZ — это элемент без группы, поэтому его можно рассматривать как отдельную группу.
- В ГРУППЕ Y есть 4 элемента (ЭЛЕМЕНТ YA, ЭЛЕМЕНТ YB, ЭЛЕМЕНТ YC, ЭЛЕМЕНТ YD), которые должны быть отсортированы по возрастанию.
База данных, с которой я работаю, является следующей:
Код | Имя | Сумма |
---|---|---|
10010 | ГРУППА X | 20000 |
10011 | ЭЛЕМЕНТ XA | 2000 |
10012 | ЭЛЕМЕНТ XB | 8000 |
10013 | ЭЛЕМЕНТ XC | 10000 |
10020 | ЭЛЕМЕНТ ZZ | 22000 |
10030 | ГРУППА Y | 26000 |
10031 | ПУНКТ YA | 11000 |
10032 | ЭЛЕМЕНТ YB | 5000 |
10033 | ЭЛЕМЕНТ YC | 9000 |
10043 | ЭЛЕМЕНТ YD | 1000 |
Ant результат, который я хочу получить после сортировки переменных, выглядит следующим образом:
Код | Имя | Сумма |
---|---|---|
10030 | ГРУППА Y | 26000 |
10031 | ПУНКТ YA | 11000 |
10033 | ЭЛЕМЕНТ YC | 9000 |
10032 | ЭЛЕМЕНТ YB | 5000 |
10043 | ЭЛЕМЕНТ YD | 1000 |
10020 | ЭЛЕМЕНТ ZZ | 22000 |
10010 | ГРУППА X | 20000 |
10013 | ЭЛЕМЕНТ XC | 10000 |
10012 | ЭЛЕМЕНТ XB | 8000 |
10011 | ЭЛЕМЕНТ XA | 2000 |
Как вы можете видеть, сначала сортируются группы, а внутри каждой группы элементы также сортируются по возрастанию.
Если кто-нибудь может помочь мне решить эту проблему, я был бы очень благодарен
Комментарии:
1. Поскольку вы выполняете нелогическую сортировку (логической будет a-z, z-a), для этого вам понадобится вспомогательный столбец, поэтому в зависимости от значения
Name
вы можете присвоить значение и упорядочить его. Кроме того, вы пометили вопрос с помощью VBA и VB.NET , которые не являются одним и тем же. ЕСЛИ вам нужно решение на основе VBA, опубликуйте код, который вы пробовали.2. Заранее спасибо за ваш ответ. Уже есть вспомогательный столбец с именем ‘Code’, для которого первые 4 значения одинаковы для соответствующих групп и элементов. Однако этого недостаточно для получения желаемого результата. Кроме того, другие теги в вопросах указаны только потому, что Excel может не решить эту проблему, поэтому я готов попробовать другие способы.
Ответ №1:
Это можно сделать только в Excel.
Чтобы получить результаты, которые вы показываете, вам необходимо выполнить сортировку по:
Group
в пользовательском порядкеY,Z,X
- а затем по сумме в порядке убывания
Группа — это первая буква последнего слова в Названии
Создайте пользовательский столбец с формулой:
=LEFT(TRIM(RIGHT(SUBSTITUTE(B2," ",REPT(" ",99)),99)))
Затем войдите в диалоговое окно сортировки:
Результаты
Комментарии:
1. Я знал о пользовательских списках, но понятия не имел, что их можно использовать в качестве настраиваемого поля сортировки. Это так хорошо. Я думал о вспомогательном столбце с числовыми значениями в зависимости от группы, но этот ответ, действительно, лучший вариант.
2. @FoxfireAndBurnsAndBurns На самом деле это основное применение, которое я использую для пользовательских списков в Excel 🙂