Макрос для сортировки листов в excel

Сортировка листов

Если количество листов в Вашей книге приближается к нескольким десяткам, то — рано или поздно — возникнет желание отсортировать листы, разложив их по порядку для удобства навигации. Стандартные средства 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

Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом, нажмите на одну из двух кнопкок knopka_view_source в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).

Сортировка по убыванию

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 кнопка. Смотрите скриншот:

Затем все листы сортируются на основе указанного типа сортировки. Смотрите скриншот:

doc-sort-sheet6

Kutools for Excel‘s Сортировать листы инструмент может быстро переупорядочить все листы в активной книге. Он поддерживает несколько типов сортировки, в том числе Альфа-сортировка, Буквенно-цифровая сортировка, Цвет Сортировка и Обратный. Кроме того, вы также можете перемещать листы вверх / вниз и сбрасывать сортировку.

  Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.


Демо: сортировка всех листов в алфавитном / буквенно-цифровом порядке


Связанная статья:

Сортировка вкладок рабочего листа по цвету


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (81)


Номинальный 5 из 5


·


рейтинги 2

Skip to content

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

На чтение 2 мин. Просмотров 1.4k.

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

Содержание

  1. Как работает макрос
  2. Код макроса
  3. Как работает это код
  4. Как использовать

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

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

Код макроса

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. Введите или вставьте код во вновь созданном модуле.

  • 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)

unsorted

Exhibit 1B: A sample file with multiple worksheets (sorted)

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 strings, 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 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.

Понравилась статья? Поделить с друзьями:
  • Макрос для создания файла excel
  • Макрос для создания таблиц в word
  • Макрос для создания списка в excel
  • Макрос для создания сводных таблиц excel
  • Макрос для создания сводной таблицы excel