Найти в Дзене
VBA Excel с нуля

VBA Excel № 133. Сортировка массива методом пересчёта.

Что это за сортировка такая – метод пересчёта? Различные виды сортировок массивов мы рассматривали в статьях №130, №131 и №132. Давайте рассмотрим ещё один и поймем с чем его «едят».

Как и в прошлом примере (не будем изобретать велосипед) начинаться будет с макроса СоздатьМассивОбратногоПорядка который создает массив чисел в обратном порядке. Количество элементов массива задаёт пользователь (всё описано в прошлой статье). А вот вторую процедуру я назвал МассивПересчетом, которая сортирует массив в столбец Б порядке возрастания. Единственным минусом всего этого является то, что алгоритм сортировки методом пересчета ограничен типами данных Integer и Long. Плюсом, что работает очень быстро.

Как всегда, на макрос я назначил большую зелёную кнопку. Вот как это выглядит на экране:,

-2
-3

Если помните в статье №132 сортировка массива в миллион элементов на рабочем листе заняла 1,82 секунды, здесь же 1,47 (конечно это не особо заметно, но всё же).

Если коротко, то вот как он работает:

  1. Создание массива и ввод данных: При запуске макроса сначала пользователю предлагается ввести количество элементов массива. Затем создаются два массива: Массив1 и МассивЧисел. Массив1 используется для хранения чисел в обратном порядке, а МассивЧисел - для числовых значений, которые будут отсортированы.
  2. Заполнение массивов: После создания массивов они заполняются числами в обратном порядке от Элементы до 1.
  3. Помещение массива в таблицу: массив Массив1 помещается в столбец "A" на листе Excel.
  4. Сортировка массива: Используется процедура МассивПересчетом, которая сортирует массив чисел в порядке возрастания. Вспомогательные функции Minimum и Maximum находят минимальное и максимальное значения в массиве.
  5. Помещение отсортированного массива в таблицу: Отсортированный массив МассивЧисел помещается в столбец "B" на листе Excel.
  6. Отображение времени сортировки: Макрос выводит сообщение с временем, затраченным на сортировку массива.

Макрос СоздатьМассивОбратногоПорядка уже описан в прошлой статье, там поменялась только одна строка:

- Call БыстраяСортировка(МассивЧисел, LBound(МассивЧисел), UBound(МассивЧисел))

На

- Call МассивПересчетом(МассивЧисел, LBound(МассивЧисел), UBound(МассивЧисел))

Вот как выглядит код макроса МассивПересчетом и его дополнительных функций Minimum и Maximum:

-4

Заметьте, что коде есть пояснения (зеленым). Если на скриншоте плохо видно, то в файле это видно.

СКАЧАТЬ ФАЙЛ ПРИМЕР