Как отсортировать листы по названию

Что делает макрос: Если нужно отсортировать листы по названию, этот макрос сделает это в алфавитном порядке.

Как работает макрос

Макрокоманда перебирает листы в книге, сравнивая текущий лист с предыдущем. Если имя предыдущего листа больше текущего листа (в алфавитном порядке), макрокоманда перемещает текущий лист перед ним.

Код макроса

Sub SortirovatListiPoNazvaniyu()
'Шаг 1: Объявляем переменные
Dim CurrentSheetIndex As Integer
Dim PrevSheetIndex As Integer
'Шаг 2: Устанавливаем счетчики и запускаем цикл
For CurrentSheetIndex = 1 To Sheets.Count
For PrevSheetIndex = 1 To CurrentSheetIndex - 1
'Шаг 3: Проверяем имя текущего листа и сравниваем с именем предыдущего 'листа
If UCase(Sheets(PrevSheetIndex).Name) > _
UCase(Sheets(CurrentSheetIndex).Name) Then
'Шаг 4: Если имя листа больше, перемещаем текущий лист перед предыдущим
Sheets(CurrentSheetIndex).Move _
Before:=Sheets(PrevSheetIndex)
End If
'Шаг 5: Возвращаемся в п.2
Next PrevSheetIndex
Next CurrentSheetIndex
End Sub

Как работает это код

Обратите внимание, что этот макрос делает сортировку только для текстовых данных, так что вы не можете получить результаты, которые вы ожидали при работе с числами на основе имен листов. Например, Лист 10 предшествует Лист 2, потому что текстуально, 1 предшествует 2.

  1. Шаг 1 объявляет две целочисленные переменные. CurrentSheetIndex содержит номер индекса для текущей итерации листа, а переменная PrevSheetIndex содержит номер
    индекса для предыдущей итерации листа.
  2. На шаге 2 макрос начинает итерации счетчика для обеих переменных. Обратите внимание, что счетчик для PrevSheetIndex одно число за CurrentSheetIndex. После того, как
    счетчики установлены, мы начинаем цикл.
  3. В шаге 3, мы проверяем, является ли имя предыдущего листа больше, чем у текущего листа (в алфавитном порядке).
    На этом этапе, обратите внимание на использование функции UCase. Мы используем ее, чтобы получить оба названия в том же состоянии в верхнем регистре. Это предотвращает ошибки
    из-за различия регистра состояния.
  4. Шаг 4 достигается, только если предыдущее имя листа больше, чем текущее имя листа. На этом этапе мы используем метод Move, чтобы переместить текущий лист перед предыдущим листом.
  5. На шаге 5, мы идем обратно к началу цикла. Каждая итерация приращений цикла обоих переменных до одного числа до последнего листа прикосновении. После того, как все итерации были потрачены, макрос заканчивается.

Как использовать

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши personal.xlb в окне Project.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.
Оцените статью
Добавить комментарий