Шаг 37.
VBA в MSExcel.
Методы объекта Range, использующие команды Excel. Метод Sort

    На этом шаге мы рассмотрим параметры этого метода и пример его использования.

    Сортировка позволяет выстраивать данные в лексикографическом порядке по возрастанию или убыванию. Метод Sort осуществляет сортировку строк списков и баз данных, а также столбцов рабочих листов с учетом до трех критериев, по которым производится сортировка. Сортировка данных вручную совершается с использованием команды Данные | Сортировка (Data | Sort).

    Синтаксис:

  Объект.Sort(key1, order1, key2, order2, key3, order3, header, orderCustom, _
    matchCase, orientation)

    Аргументы:

Таблица 1. Аргументы метода Sort
Аргумент Назначение
Объект Диапазон, который будет сортироваться
key1 Ссылка на первое упорядочиваемое поле
order1 Задает порядок упорядочивания. Допустимые значения:
  • xlAscending (возрастающий порядок);
  • xlDescending (убывающий порядок).
key2 Ссылка на второе упорядочиваемое поле
order2 Задает порядок упорядочивания. Допустимые значения:
  • xlAscending (возрастающий порядок);
  • xlDescending (убывающий порядок).
key3 Ссылка на третье упорядочиваемое поле
order3 Задает порядок упорядочивания. Допустимые значения:
  • xlAscending (возрастающий порядок);
  • xlDescending (убывающий порядок).
header Допустимые значения:
  • xlYes (первая строка диапазона содержит заголовок, который не сортируется);
  • xlNo (первая строка диапазона не содержит заголовок, по умолчанию считается данное значение);
  • xlGuess (Excel решает, имеется ли заголовок).
orderCustom Пользовательский порядок сортировки. По умолчанию используется Normal
matchCase Допустимые значения: True (учитывается регистр) и False (регистр не учитывается)
orientation Допустимые значения:
  • xlTopToBottom (сортировка осуществляется сверху вниз, т.е. по строкам);
  • xlLeftToRight (слева направо, т.е. по столбцам).

    Например, диапазон А1:С20 рабочего листа Лист1 сортируется следующей командой в порядке возрастания так, что первоначальная сортировка происходит по первому столбцу этого диапазона, а второстепенная — по второму.

  Worksheets("Лист1").Range("Al:C20").Sort _
    key1:=Worksheets("Лист1").Range("Al"), _
    key2:=Worksheets("Лист1").Range("B1")

    Приведем соответствие между аргументами метода Sort и сортировкой данных на рабочем листе вручную при помощи команды Данные | Сортировка (Data | Sort).

  1. Выделяем диапазон A1:G13, содержащий записи базы данных о туристах, которые должны быть отсортированы (рисунок 1).


    Рис.1. Сортируемый список

        В методе Sort за диапазон с записями, подлежащими сортировке, отвечает объект, к которому применяется метод. В данном случае метод Sort надо применить к диапазону Range("A1:G13").

  2. Выберем команду Данные | Сортировка (Data | Sort). В результате появится диалоговое окно Сортировка диапазона (Sort) (рисунок 2).


    Рис.2. Диалоговое окно Сортировка диапазона

        Используя это окно, можно установить до трех критериев, по которым производится сортировка.

    • Выбор в списках Сортировать по (Sort by), Затем по (Then by) и В последнюю очередь, по (Then by) определяют поля, используемые для фильтрации списка.
    • Переключатели по возрастанию (Ascending) и по убыванию (Descending), расположенные рядом с каждым раскрывающимся списком, определяют порядок сортировки.
    • Записи для идентификации полей, выводимые в раскрывающихся списках, определяются группой Идентифицировать диапазон данных по (My list has). Если в этой группе выбран переключатель подписям (первая строка диапазона) (Header row), то в раскрывающихся списках выводятся тексты из первых строк диапазонов. Если выбран переключатель обозначениям столбцов листа (No header row), то выводятся названия столбцов.
    Например, отсортируем базу данных о туристах в порядке возрастания полей, выбранных в качестве критериев сортировки, установив первоначальным критерием поле Направление тура, вторичным — Оплачено. Сортировку по третьему критерию производить не будем. Так как был выбран диапазон A1:G13, содержащий названия полей, то для идентификации полей выберем в группе Идентифицировать поля по (My list has) переключатель подписям (первая строка диапазона) (Header row). В методе Sort за выбор поля, по которому производится первоначальная сортировка, отвечает аргумент key1. В данном случае для выбора поля Направление тура аргументу key1 надо присвоить значение Range ("D2"). Порядок сортировки по первому критерию устанавливается аргументом order1. В данном случае сортируем по возрастанию, поэтому аргументу order1 присваиваем xlAscending. Вторичная сортировка происходит по полю Оплачено по возрастанию, поэтому аргументам key2 и order2 присваиваем Range ("E2") и xlAscending соответственно. Параметром, отвечающим за идентификацию полей, является header. В данном случае в группе Идентифицировать поля по (My list has) выбран переключатель подписям (первая строка диапазона) (Header row), поэтому параметру header присвоим значение xlYes. Таким образом, имеем:
      Range ("Al:G13").Sort  key1:=Range ("D2"), _
        order1:=xlAscending, key2:=Range("E2") , _
        order2:=xlAscending, header:= xlYes
    

  3. Нажатие кнопки OK приведет к сортировке записей по указанным критериям (рисунок 3).


    Рис.3. Результат сортировки

    На следующем шаге мы рассмотрим метод Subtotal.




Предыдущий шаг Содержание Следующий шаг