При сортировке важно перемещать запись целиком. Отдельная сортировка одного столбца может разорвать связь товара с количеством и ценой.
Отсортируем заказы сначала по количеству, затем по названию товара.
Что подготовить
Подготовьте лист «Заказы» с 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; данные в соседних несогласованных столбцах туда не включены.
Как проверить результат
Ожидаемый порядок: Маркер (2), Блокнот (3), Папка (3), Ручка (10). Цены и суммы перемещаются вместе с товаром.
Ограничения и частые ошибки
Если количество хранится текстом, сортировка может следовать текстовым правилам. Приведите типы к согласованному виду до сортировки, а не пытайтесь исправить порядок сменой направления.
Не используйте Header:=xlGuess для учебного процесса с известной структурой: задайте заголовок явно. При добавлении строк фиксированное A1:D5 нужно расширить или заменить областью таблицы.
Для восстановления исходного порядка удобно иметь отдельный номер записи. Сортировка не должна становиться единственным способом сопоставить заказ с его прежней строкой.
Проверка перед рабочим запуском
- У равного количества действует второй ключ.
- Цена и товар не разошлись.
- Заголовок остался в первой строке.
- Текстовые и числовые количества не смешаны.
Сначала выполните пример на учебной копии с указанными именами листов и диапазонами. Сравните исходные данные и результат, затем сохраните проверенный вариант процедуры.
Продолжить изучение: Последняя заполненная строка в Excel VBA, AutoFilter и расширенный фильтр в VBA, ListObject в VBA: таблица и перебор её строк.
Разберитесь с макросами вместе с преподавателем
На занятии вы записываете действия, читаете код и проверяете результат на небольшом примере. Преподаватель подберёт задания под ваш уровень и поможет понять связь между командами VBA и изменениями в книге.
Начните с бесплатного вводного урока: 45 минут, один на один, без обязательств. Обсудите цель и попробуйте формат. Решение о продолжении — после занятия.
Оставить комментарий
Есть вопрос по статье? Напишите комментарий — будем рады обсудить.
Комментарии