RSS

Сортировка листов в Excel с помощью макроса

В этом уроке разберем один из способов сортировки листов по алфавиту.

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

В MS Excel нет встроенного средства для такой сортировки, создадим  простой макрос для упорядочивания листов.

Добавим в нашу рабочую книгу лист и в первом столбце этого листа запишем все названия листов данной книги. Отсортируем диапазон с именами листов, переместим листы согласно сортировке и готово! 

Option Explicit

Sub СортировкаЛистов()
    Dim i As Integer
    Dim wsh As Worksheet
    Dim wsh_count As Integer
    With ThisWorkbook
        Set wsh = .Worksheets.Add 'добавление нового листа
        wsh_count = .Worksheets.Count
        Application.ScreenUpdating = False    'отключение обновления экрана
        'запись названий листов в столбец А нового листа
        For i = 1 To wsh_count
            wsh.Cells(i, 1).Value = .Worksheets(i).Name
        Next i
        'сортировка диапазона по возрастанию
        wsh.Range("A1:B" & Trim(CStr(wsh_count))).Sort _
            Key1:=wsh.Cells(1, 1), order1:=xlAscending, Header:=xlNo
        For i = 2 To wsh_count
            .Worksheets(wsh.Cells(i, 1).Value).Move _
                After:=.Worksheets(wsh.Cells(i - 1, 1).Value)
        Next i
    End With
    Application.DisplayAlerts = False   'отключение оповещений
   wsh.Delete                          'удаление добавленного листа
    Application.ScreenUpdating = True   'включение обновления экрана
    Application.DisplayAlerts = True    'включение оповещений
    Set wsh = Nothing
End Sub

Теперь подробнее разберем используемые методы в алгоритме​

синтаксис Worksheets.Add (Before, After, Count, Type) — добавление листов в книгу Excel

After— указывает лист, после которого будет добавлен рабочий лист

​​Before— указывает лист, перед которым будет добавлен рабочий лист

Count — количество добавляемых листов, по умолчанию 1

Type — тип рабочего листа, по умолчанию xlWorkSheet

​Если Before и After опущены, то по умолчанию лист размещается после активного листа

 

​синтаксис Worksheets.Move (Before|After) — перемещение рабочего листа в другое место рабочей книги Excel

After— указывает лист, после которого будет перемещен рабочий лист

​​Before— указывает лист, перед которым будет перемещен рабочий лист

​Одновременно может быть указан только один аргумент (After или Before)

 

Воспользуемся встроенной возможностью Excel – сортировкой диапазона.

ДиапазонТаблицы.Sort ([Key1], [Order1 As XlSortOrder = xlAscending], [Key2], [Type], [Order2 As XlSortOrder = xlAscending], [Key3], [Order3 As XlSortOrder = xlAscending], [Header As XlYesNoGuess = xlNo], [OrderCustom], [MatchCase], [Orientation As XlSortOrientation = xlSortRows], [SortMethod As XlSortMethod = xlPinYin], [DataOption1 As XlSortDataOption = xlSortNormal], [DataOption2 As XlSortDataOption = xlSortNormal], [DataOption3 As XlSortDataOption = xlSortNormal])

ДиапазонТаблицы — диапазон Range для сортировки

Key1 — первое упорядочиваемое поле

Order1 — порядок сортировки, xlAscending- по возрастанию, xlDescending- по убыванию

Header — заголовок (xlNo — отсутствует, xlYes — есть, xlGuess — Excel определяет сам)

OrderCustom — пользовательский порядок сортировки, по умолчанию Normal

MatchCase — True или False (учитывается или нет регистр)

Orientation — направление сортировки,  xlSortRows — по строкам,  xlSortColumns — по столбцам

Диапазон до сортировки

Диапазон после сортировки

 

Application.DisplayAlerts = False   отключение оповещений

Без этой команды при выполнении макроса перед удалением листа появится сообщение 

Результат выполнения макроса: