Сортировка листов
Если количество листов в Вашей книге приближается к нескольким десяткам, то — рано или поздно — возникнет желание отсортировать листы, разложив их по порядку для удобства навигации. Стандартные средства Excel не позволяют сделать этого, но можно использовать простой макрос, который реализует эту сортировку.
Откройте редактор Visual Basic с помощью сочетания клавиш ALT+F11, вставьте новый модуль (меню Insert — Module) и скопируйте туда код этого макроса:
Sub SortSheets() Dim I As Integer, J As Integer For I = 1 To Sheets.Count - 1 For J = I + 1 To Sheets.Count If UCase(Sheets(I).Name) > UCase(Sheets(J).Name) Then Sheets(J).Move Before:=Sheets(I) End If Next J Next I End Sub
Теперь этот макрос можно запустить через меню Сервис — Макрос — Макросы (Tools — Macro — Macros) или нажав сочетание клавиш ALT+F8 и выбрав команду Выполнить (Run) он быстро отсортирует все листы в текущей книге по возрастанию.
Ссылки по теме
- Быстрый переход между листами в книге Excel
- Что такое макросы, куда вставлять код макроса, как их использовать
- Удобное управление листами с помощью Менеджера Листов из надстройки PLEX
В Microsoft Excel 2007, а также в более ранних версиях, нельзя сортировать листы рабочей книги стандартными средствами. Для того, чтобы упорядочить расположение листов в книге, можно прибегнуть к помощи Visual Basic for Applications (VBA).
На одной из страниц сайта http://support.microsoft.com/kb/812386 размещен программный код макроса, который сортирует листы в рабочих книгах Excel по возрастанию и убыванию. Ниже приведен этот код в несколько измененном виде.
Сортировка по возрастанию
Sub Sortirovka_Listov_Po_Vozrastaniyu() Dim i As Integer Dim j As Integer For i = 1 To Sheets.Count For j = 1 To Sheets.Count - 1 If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then Sheets(j).Move After:=Sheets(j + 1) End If Next j Next i End Sub
Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом, нажмите на одну из двух кнопкок в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).
Сортировка по убыванию
Sub Sortirovka_Listov_Po_Ubyvaniyu() Dim i As Integer Dim j As Integer For i = 1 To Sheets.Count For j = 1 To Sheets.Count - 1 If UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name) Then Sheets(j).Move After:=Sheets(j + 1) End If Next j Next i End Sub
Приведенный выше макрос сортирует листы по имени и вполне справляется со своей задачей. В большинстве случаев он помогает автоматизировать упорядочивание листов в рабочей книге, но и свои недостатки тоже имеет. Например, если имена листов состоят из двух частей, текстовой и числовой, то в результате такой сортировки за именем «Лист1» будет следовать «Лист11», а не «Лист2», как иногда хотелось бы. Этот недостаток можно устранить, если сортировать листы по двум параметрам, как по текстовой, так и по числовой части.
Надстройка для сортировки листов Excel
Механизм сортировки листов по двум параметрам реализован в надстройке, действие которой можно оценить на видео. Надстройка разработана на основе макроса, но более удобна при использовании, так как позволяет быстро запускать макросы прямо из панели инструментов и не тратить время на выбор нужного макроса из списка.
В другой надстройке реализовано сразу несколько способов сортировки листов от алфавитной, до сортировки по настраиваемым спискам.
Другие материалы по теме:
Как отсортировать листы в алфавитном / буквенно-цифровом порядке в Excel?
Обычно вы можете отсортировать или упорядочить порядок вкладок рабочего листа в Excel, перетащив вкладки листа на панель вкладок листа. Но для того, чтобы сделать это с несколькими листами, вы можете рассмотреть следующие хитрые способы быстрой сортировки листов в алфавитном / буквенно-цифровом порядке в большой книге.
Сортировка листов в алфавитном / буквенно-цифровом порядке с кодом VBA
Сортировка рабочих листов в алфавитном/буквенно-цифровом порядке с помощью Kutools for Excel
Сортировка листов в алфавитном / буквенно-цифровом порядке с кодом VBA
В центре поддержки Майкрософт есть макрос для сортировки листов по альфа-каналу. Мы можем применить его, выполнив следующие шаги:
1. Удерживая нажатой ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модули, а затем вставьте следующий макрос в Окно модуля.
VBA: сортировка листов в алфавитном / буквенно-цифровом порядке
Sub SortWorkBook()
'Updateby20140624
Dim xResult As VbMsgBoxResult
xTitleId = "KutoolsforExcel"
xResult = MsgBox("Sort Sheets in Ascending Order?" & Chr(10) & "Clicking No will sort in Descending Order", vbYesNoCancel + vbQuestion + vbDefaultButton1, xTitleId)
For i = 1 To Application.Sheets.Count
For j = 1 To Application.Sheets.Count - 1
If xResult = vbYes Then
If UCase$(Application.Sheets(j).Name) > UCase$(Application.Sheets(j + 1).Name) Then
Sheets(j).Move after:=Sheets(j + 1)
End If
ElseIf xResult = vbNo Then
If UCase$(Application.Sheets(j).Name) < UCase$(Application.Sheets(j + 1).Name) Then
Application.Sheets(j).Move after:=Application.Sheets(j + 1)
End If
End If
Next
Next
End Sub
3. нажмите F5 ключ для запуска этого макроса. В следующем окне подсказки щелкните Да, все листы будут отсортированы по возрастанию в алфавитном порядке; и нажмите Нет, все листы будут отсортированы по убыванию в алфавитном порядке.
Сортировка рабочих листов в алфавитном/буквенно-цифровом порядке с помощью Kutools for Excel
Если вы не знакомы с макросами или предпочитаете другие способы, вы можете попробовать Kutools for Excel. Kutools for Excel‘s Сортировать листы инструмент может легко сортировать все листы.
1. Нажмите Кутулс Плюс > Рабочий лист > Сортировать листы. Смотрите скриншот:
2. В Сортировать листы В диалоговом окне выберите один тип сортировки, который вам нужен на правой панели, например Альфа-сортировка, Буквенно-цифровая сортировка, а затем нажмите OK кнопка. Смотрите скриншот:
Затем все листы сортируются на основе указанного типа сортировки. Смотрите скриншот:
Kutools for Excel‘s Сортировать листы инструмент может быстро переупорядочить все листы в активной книге. Он поддерживает несколько типов сортировки, в том числе Альфа-сортировка, Буквенно-цифровая сортировка, Цвет Сортировка и Обратный. Кроме того, вы также можете перемещать листы вверх / вниз и сбрасывать сортировку.
Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Демо: сортировка всех листов в алфавитном / буквенно-цифровом порядке
Связанная статья:
Сортировка вкладок рабочего листа по цвету
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (81)
Номинальный 5 из 5
·
рейтинги 2
Skip to content
Как отсортировать листы по названию
На чтение 2 мин. Просмотров 1.4k.
Что делает макрос: Если нужно отсортировать листы по названию, этот макрос сделает это в алфавитном порядке.
Содержание
- Как работает макрос
- Код макроса
- Как работает это код
- Как использовать
Как работает макрос
Макрокоманда перебирает листы в книге, сравнивая текущий лист с предыдущем. Если имя предыдущего листа больше текущего листа (в алфавитном порядке), макрокоманда перемещает текущий лист перед ним.
Код макроса
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 объявляет две целочисленные переменные. CurrentSheetIndex содержит номер индекса для текущей итерации листа, а переменная PrevSheetIndex содержит номер
индекса для предыдущей итерации листа. - На шаге 2 макрос начинает итерации счетчика для обеих переменных. Обратите внимание, что счетчик для PrevSheetIndex одно число за CurrentSheetIndex. После того, как
счетчики установлены, мы начинаем цикл. - В шаге 3, мы проверяем, является ли имя предыдущего листа больше, чем у текущего листа (в алфавитном порядке).
На этом этапе, обратите внимание на использование функции UCase. Мы используем ее, чтобы получить оба названия в том же состоянии в верхнем регистре. Это предотвращает ошибки
из-за различия регистра состояния. - Шаг 4 достигается, только если предыдущее имя листа больше, чем текущее имя листа. На этом этапе мы используем метод Move, чтобы переместить текущий лист перед предыдущим листом.
- На шаге 5, мы идем обратно к началу цикла. Каждая итерация приращений цикла обоих переменных до одного числа до последнего листа прикосновении. После того, как все итерации были потрачены, макрос заканчивается.
Как использовать
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши personal.xlb в окне Project.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
- Download sheetsort
Imagine that you have a large file with 20 or more worksheets. It could be, for instance, a file with snapshot financial models for the companies in your coverage universe or a breakdown of home sales in different regions of the city.
You want to sort these worksheets into some kind of order that would allow you and your team to access your data more quickly. The SortSheets
macro will help you to sort your sheet tabs into any kind of order or metric you want (e.g., alphabetically, by ranking, etc.) using the qsort algorithm (an explanation of the algorithm can be found at http://en.wikipedia.org/wiki/Quicksort).
Exhibit 1A: A sample file with multiple worksheets (unsorted)
Exhibit 1B: A sample file with multiple worksheets (sorted)
Exhibit 2: SortSheets macro (VBA)
Sub SwapSheets(S1 As Integer, S2 As Integer) Dim Sh1 As Worksheet, Sh2 As Worksheet Set Sh1 = Sheets(S1) Set Sh2 = Sheets(S2) Sh1.Move Before:=Sh2 Sh2.Move Before:=Sheets(S1) End Sub Function QSortPartitionSheets(L As Integer, R As Integer, Pvt As Integer) As Integer Dim PivotValue As String Dim SI As Integer, I As Integer PivotValue = Sheets(Pvt).Name SwapSheets Pvt, R SI = L For I = L To R - 1 If Sheets(I).Name <= PivotValue Then SwapSheets I, SI SI = SI + 1 End If Next SwapSheets SI, R QSortPartitionSheets = SI End Function Sub QSortSheets(L As Integer, R As Integer) Dim Pvt As Integer Dim NewPvt As Integer If R > L Then NewPvt = QSortPartitionSheets(L, R, L) QSortSheets L, NewPvt - 1 QSortSheets NewPvt + 1, R End If End Sub Public Sub SortSheets() QSortSheets 1, Sheets.Count End Sub
The code in Exhibit 2 allows you to sort your worksheets alphabetically. To sort by some other metric (e.g. ranking, regional sales numbers, etc.), simply change QSortPartitionSheets
to use variants instead of string
s, and define a function to lookup the value using the sheet name (as demonstrated in Exhibit 3).
Exhibit 3: Modified QSortPartitionSheets (VBA)
Function YourFunction(SheetName As String) As Variant End Function Function QSortPartitionSheets(L As Integer, R As Integer, Pvt As Integer) As Integer Dim PivotValue As Variant Dim SI As Integer, I As Integer PivotValue = YourFunction(Sheets(Pvt).Name) SwapSheets Pvt, R SI = L For I = L To R - 1 If YourFunction(Sheets(I).Name) <= PivotValue Then SwapSheets I, SI SI = SI + 1 End If Next SwapSheets SI, R QSortPartitionSheets = SI End Function
License
Written By
Software Developer
Excel Adviser
Canada
I am a freelance software developer with a variety of different interests. My main area of expertise is Microsoft Office add-ins (Excel/Outlook mostly) but I also develop Windows applications, Access Databases and Excel macros . I develop in VBA, C# and C++. My website exceladviser.com has articles on Excel, Access, Microsoft Office development, and general Windows programming (WPF, etc.).
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.