Как отсортировать список Excel условно, используя код VBA

Сортировка списка с использованием стандартных инструментов сортировки Excel или использования функций непосредственно в коде VBA довольно проста. Но сортировать список, в котором вы должны применять свои собственные критерии, немного сложнее.

Пример условной сортировки

Типичным сценарием может быть сортировка по алфавиту в следующем списке стран, но всегда в верхней части списка находятся крупные регионы, такие как США, Великобритания и Япония.

 

страна
Новая Зеландия
Австралия
США
Мексика
Бельгия
Великобритания
Япония

Мы создадим новый список, используя простой код VBA, который можно настроить.

Организация кода

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

Сначала мы определяем названия и количество стран, которые мы хотим отобразить вверху списка.


topItems = ", США, Великобритания, Япония"
ctItems = UBound (Split (topItems, ",")) - 1

Затем мы можем выбрать список и установить счетчик для «лучших» стран и «других».


Set rng = ActiveCell.CurrentRegion
top = 1
другие = 1

Теперь мы готовы отделить список от лучших стран и других стран, которые мы будем делать, переместив каждую страну в новый список рядом со старым. Не забывайте, что мы должны игнорировать строку заголовка.


Для x = 2 до rng.Rows.Count

Если текущее значение ячейки является одной из самых высоких стран, мы переместим значение в верхнюю часть нового списка, а если нет, то переместим его в нижнюю часть нового списка.


Если InStr (topItems, "," & rng.Rows (x) & ","), то
top = top + 1
Ячейки (верх, 2) = rng.Rows (x)
более
другие = другие + 1
Клетки (другие + ctItems, 2) = rng.Rows (x)
Конец, если
после

Наш список был реорганизован следующим образом, и нам нужно только отсортировать нижнюю часть списка в столбце 2.


США
Великобритания
Япония
Новая Зеландия
Австралия
Мексика
Бельгия

Следующий код сортирует список ниже самых высоких стран в столбце 2. Поскольку мы знаем, сколько стран являются самыми высокими, диапазон начинается с двух строк ниже этого значения — чтобы включить строку заголовка.


Установите rng = Range ("b" & ctItems + 2 & ":" & ActiveCell.End (xlDown) .Address)
rng.Sort Key1: = Range ("b1"), order1: = xlAscending

Код дает конечный результат, который выглядит следующим образом:


США
Великобритания
Япония
Австралия
Бельгия
Мексика
Новая Зеландия

Одним из направлений развития может быть организация лучших стран в определенном порядке. Было бы легко закодировать решение, но хорошая практика — иметь масштабируемое решение; например, это может быть список клиентов, и вы должны выделить 100 лучших покупателей.

резюме

Этот короткий код VBA обеспечивает решение проблемы, которую нелегко решить с помощью стандартных инструментов Excel. С таким сценарием часто сталкиваются разработчики VBA, и он является хорошим кандидатом для сохранения в удобном месте для будущего использования.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *