При сортировке важно перемещать запись целиком. Отдельная сортировка одного столбца может разорвать связь товара с количеством и ценой.

Отсортируем заказы сначала по количеству, затем по названию товара.

Что подготовить

Подготовьте лист «Заказы» с A1:D5. В примере у Блокнота и Папки одинаковое количество 3, чтобы проверить второй ключ сортировки.

Заголовки находятся в первой строке. Диапазон включает все четыре столбца каждой записи.

Исходные учебные данные перед выполнением процедуры.
Исходные учебные данные перед выполнением процедуры.

Код и порядок выполнения

Option Explicit
Sub SortOrders()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Заказы")
    ws.Range("A1:D5").Sort _
        Key1:=ws.Range("B2"), Order1:=xlAscending, _
        Key2:=ws.Range("A2"), Order2:=xlAscending, _
        Header:=xlYes, Orientation:=xlTopToBottom
End Sub

Первый ключ B задаёт количество по возрастанию. Второй A упорядочивает товары внутри одинакового количества. Header:=xlYes сохраняет строку заголовков вне данных.

Адреса ключей относятся к тому же ws, что и сортируемая область. Операция меняет порядок строк внутри A1:D5; данные в соседних несогласованных столбцах туда не включены.

Учебный код: Сортировка диапазона в VBA по нескольким столбцам.
Учебный код: Сортировка диапазона в VBA по нескольким столбцам.

Как проверить результат

Ожидаемый порядок: Маркер (2), Блокнот (3), Папка (3), Ручка (10). Цены и суммы перемещаются вместе с товаром.
Ожидаемый порядок: Маркер (2), Блокнот (3), Папка (3), Ручка (10). Цены и суммы перемещаются вместе с товаром.

Ожидаемый порядок: Маркер (2), Блокнот (3), Папка (3), Ручка (10). Цены и суммы перемещаются вместе с товаром.

Ограничения и частые ошибки

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

Не используйте Header:=xlGuess для учебного процесса с известной структурой: задайте заголовок явно. При добавлении строк фиксированное A1:D5 нужно расширить или заменить областью таблицы.

Для восстановления исходного порядка удобно иметь отдельный номер записи. Сортировка не должна становиться единственным способом сопоставить заказ с его прежней строкой.

Проверка перед рабочим запуском

  • У равного количества действует второй ключ.
  • Цена и товар не разошлись.
  • Заголовок остался в первой строке.
  • Текстовые и числовые количества не смешаны.

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

Продолжить изучение: Последняя заполненная строка в Excel VBA, AutoFilter и расширенный фильтр в VBA, ListObject в VBA: таблица и перебор её строк.

Разберитесь с макросами вместе с преподавателем

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

Начните с бесплатного вводного урока: 45 минут, один на один, без обязательств. Обсудите цель и попробуйте формат. Решение о продолжении — после занятия.

Записаться на бесплатный урок