Найти тему

📌 Vba Excel: сортировка при помощи метода Range.Sort. Полная инструкция с примерами

Оглавление

Всем привет! 👋

Напомним, что в одном из обзоров мы рассматривали как отсортировать значения в массиве с использованием цикла For:

а так же способ сортировки "пузырьком":

Но этим, способы выполнить сортировку, не ограничиваются 😉

Сегодня разберем еще одно решение с использованием Метода Range.Sort

Vba Excel: сортировка при помощи метода Range.Sort. Полная инструкция с примерами
Vba Excel: сортировка при помощи метода Range.Sort. Полная инструкция с примерами

📢 Файл с исходным кодом размещен в конце статьи 🔽

-3

▶️ Основные параметры

▶️ Ключ сортировки

-5

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

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

▶️ Сортировка в пределах одного столбца

Пусть имеем некоторый диапазон заданный одним столбцом (без заголовков) 🔽

-6

🔘 Чтобы выполнить сортировку применим простой макрос:

-7

Данный макрос выполняет простую сортировку по возрастанию для указанного диапазона ячеек (в данном случае, сортировка осуществляется для столбца A, начиная с ячейки A1 и заканчивая ячейкой A23)

Параметры:

-8

📝 Результат:

-9

📝 Аналогичный результат получим при сортировке текстовых данных:

-10

А что если нужный столбец или диапазон содержат заголовки?

Как указывалось выше:

-11

А потому, сделав в замену Header:=xlNo на Header:=xlYes:

-12

📝 Получим нужный результат:

-13

Все работает отлично! 😉 Но...

⚠️ Проблема данного макроса в том, что в нем "жестко" указан диапазон.

🔘 Чтобы снять данное ограничение внесем следующие изменения:

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

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

  • В данном случае используется Selection, который представляет выделенный пользователем диапазон ячеек в момент выполнения макроса. Таким образом, сортировка будет производиться именно для выбранного пользователем диапазона.
  • В параметре Key1 Selection указан как ключ сортировки. Это означает, что сортировка будет выполнена на основе значений в выбранном диапазоне ячеек.

Так же добавлена обработка ошибки, которая проверяет, был ли выделен какой-либо диапазон для сортировки или является ли выделенный диапазон пустым:

  • Если условие НЕ выполняется, то выводится сообщение об ошибке, указывающее пользователю выделить диапазон для сортировки:
-15

Затем процедура выходит из выполнения с помощью команды Exit Sub.

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

Теперь макрос отлично справляется с задачей! 😉

▶️ Сортировка в пределах диапазона

А что если источник данных содержит несколько столбцов? 🔽

-16

🔘 Чтобы выполнить сортировку по числу сделок используя подход выше применим макрос:

данный макрос позволяет упорядочить данные в диапазоне от A2 до C23 в порядке возрастания по значениям в столбце C
данный макрос позволяет упорядочить данные в диапазоне от A2 до C23 в порядке возрастания по значениям в столбце C

В данном случае диапазон ячеек определяется с помощью функции Range и указывается в аргументе Range("A2:C23").

Ключ сортировки Key1 указывается в аргументе Range("C2"), что означает, что сортировка будет выполняться по данным в столбце C, начиная с ячейки C2.

или

данный макрос сортирует указанный диапазон ячеек в порядке возрастания в соответствии с значениями в столбце C.
данный макрос сортирует указанный диапазон ячеек в порядке возрастания в соответствии с значениями в столбце C.

В данном случае параметр Header установлен на xlYes, что указывает на наличие заголовка в первой строке диапазона.

📝 Результат:

-19

⚠️ Но проблема осталась! Макрос выполняет сортировку указанного диапазона "A2:C23".

🔘 Снять "ограничение" можно следующими образом:

Данный подход позволяет пользователю выбрать столбец для сортировки в выбранном диапазоне (без заголовков).
Данный подход позволяет пользователю выбрать столбец для сортировки в выбранном диапазоне (без заголовков).

При запуске процедуры проверяем, выделен ли диапазон для сортировки:

Предупреждение! в случае если диапазон не выделен
Предупреждение! в случае если диапазон не выделен

Далее появляется окно ввода, где пользователь может ввести номер столбца, по которому он хочет отсортировать данные:

-22

🔔 Если пользователь оставляет окно ввода пустым или вводит некорректное значение, процедура прекращает выполнение.

После ввода номера столбца в диалоговом окне макрос проверяет корректность введенного значения:

-23
  • Если введен корректный номер столбца, процедура сортирует выбранный столбец по возрастанию:
-24
  • В случае, если указанный номер столбца выходит за пределы доступных столбцов, выводится соответствующее сообщение об ошибке:
-25

▶️ Сортировка по убыванию

Выполнить сортировку по убыванию позволит параметр Order1:=xlDescending.

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

🔘 Например, в рассмотренный ранее макрос внесем изменения:

этот макрос предназначен для сортировки указанного диапазона данных по убыванию с предположением наличия заголовков в данных.
этот макрос предназначен для сортировки указанного диапазона данных по убыванию с предположением наличия заголовков в данных.

В данном случае, диапазон данных A1:C23 сортируется по ключу с использованием столбца С1 в порядке убывания (xlDescending). Параметр Header установлен в xlYes, что означает наличие заголовков в данных.

📝 Результат:

-27

▶️ Сортировка по нескольким столбцам

Добавление дополнительного условия позволит задать два поля сортировки.

Например для представленных ниже исходных данных выполним сортировку по Фамилии и по числу сделок:

-28

🔘 Пример макроса:

данный макрос производит сортировку выбранных столбцов в порядке убывания.
данный макрос производит сортировку выбранных столбцов в порядке убывания.

Пользователю предлагается ввести номера двух столбцов, по которым будет производиться сортировка:

-30
  • Если номера столбцов корректные, сортировка производится на основе выбранных столбцов с указанием порядка сортировки:
Пример  сортировки по нескольким ключам
Пример сортировки по нескольким ключам
  • Если пользователь не вводит номера столбцов процедура прекращает работу;
  • Если введены некорректные значения, макрос выдает соответствующие сообщения об ошибке.
-32
Наша команда очень заинтересована в создании качественного и полезного контента. Поэтому, если Вам понравился этот урок, не забудьте поблагодарить автора лайком 👍. Если у Вас есть вопросы или своё решение, не стесняйтесь оставить комментарий 💬. Нужно решение для другой проблемы? Пожалуйста, напишите свой вопрос в комментариях 💬, и мы обязательно рассмотрим его в ближайшей теме обзора. Мы ценим Вашу обратную связь 💝, так как это помогает нам оценить, насколько данный материал был полезен для Вас
Наша команда очень заинтересована в создании качественного и полезного контента. Поэтому, если Вам понравился этот урок, не забудьте поблагодарить автора лайком 👍. Если у Вас есть вопросы или своё решение, не стесняйтесь оставить комментарий 💬. Нужно решение для другой проблемы? Пожалуйста, напишите свой вопрос в комментариях 💬, и мы обязательно рассмотрим его в ближайшей теме обзора. Мы ценим Вашу обратную связь 💝, так как это помогает нам оценить, насколько данный материал был полезен для Вас

СКАЧАТЬ ПРИМЕР

Наука
7 млн интересуются