В этом уроке разберем один из способов сортировки листов по алфавиту.
Максимальное количество листов в книге 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 отключение оповещений
Без этой команды при выполнении макроса перед удалением листа появится сообщение
Результат выполнения макроса: