Как отсортировать листы в Excel с помощью VBA (по алфавиту)

Если вы работаете с большим количеством листов в Excel, вы знаете, что управление ими может стать проблемой.

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

Насколько легко было бы, если бы существовал способ быстро сортировать листы в Excel.

Хотя для этого нет встроенных функций, это можно сделать (легко) с помощью VBA.

В этом руководстве я дам вам код и точные шаги, которые необходимо выполнить для сортировки листов в Excel.

Вы можете настроить код, чтобы отсортировать листы в порядке возрастания или убывания.

Код VBA для сортировки листов в Excel

Ниже приведен код, который сортирует листы в алфавитном порядке, как только вы его запустите.

Sub SortWorksheetsTabs () Application.ScreenUpdating = False Dim ShCount As Integer, i As Integer, j As Integer ShCount = Sheets.Count For i = 1 To ShCount - 1 For j = i + 1 To ShCount If UCase (Sheets (j). Имя) <UCase (Sheets (i) .Name) Then Sheets (j) .Move before: = Sheets (i) End If Next j Next i Application.ScreenUpdating = True End Sub

Вышеупомянутый простой код, который использует циклы For Next для анализа каждого рабочего листа на всех рабочих листах.

Он сравнивает имя рабочего листа со всеми рабочими листами и перемещает его на основе имени в алфавитном порядке.

Затем он переходит к следующему листу и затем сверяет его со всеми листами.

Этот процесс повторяется для всех рабочих листов, и конечным результатом является порядок рабочих листов, отсортированных в алфавитном порядке.

Несколько важных вещей, которые нужно знать об этом коде:

  1. Функция UCase используется, чтобы убедиться, что строчные и прописные буквы не обрабатываются по-разному.
  2. Значение Application.ScreenUpdating устанавливается на False в начале кода и изменяется на True в конце кода. Это гарантирует, что пока код запущен, вы не увидите его на экране. Это также помогает ускорить выполнение кода.

Если вы хотите отсортировать листы в порядке убывания, вам нужно только изменить знак (больше).

Приведенный ниже код сортирует листы в порядке убывания:

'Этот код будет отсортировать листы по алфавиту Sub SortWorksheetsTabs () Application.ScreenUpdating = False Dim ShCount As Integer, i As Integer, j As Integer ShCount = Sheets.Count For i = 1 To ShCount - 1 For j = i + 1 To ShCount Если UCase (Sheets (j) .Name)> UCase (Sheets (i) .Name) Then Sheets (j) .Move before: = Sheets (i) End If Next j Next i Application.ScreenUpdating = True End Sub

Вы также можете дать пользователю возможность выбрать, хочет ли он сортировать по возрастанию / убыванию.

В приведенном ниже коде отобразится окно сообщения, и пользователь сможет выбрать порядок сортировки.

Sub SortWorksheetsTabs () Application.ScreenUpdating = False Dim ShCount As Integer, i As Integer, j As Integer Dim SortOrder As VbMsgBoxResult SortOrder = MsgBox («Выберите« Да »для возрастающего порядка и« Нет »для убывающего», vbYesCount. i = 1 To ShCount - 1 For j = i + 1 To ShCount Если SortOrder = vbYes Then If UCase (Sheets (j) .Name) UCase (Sheets (i) .Name) Then Sheets (j) .Move before: = Sheets (i) End If End If Next j Next i Application.ScreenUpdating = True End Sub

При выполнении приведенного выше кода отображается сообщение, как показано ниже. Сортировка производится на основе выбора («Да» для возрастания и «Нет» для убывания).

Если вы нажмете «Отмена», код остановится и ничего не произойдет.

Примечание: Сортировку нельзя отменить. Если вы хотите сохранить исходный порядок, сделайте копию книги.

Слово предостережения: Приведенный выше код работает в большинстве случаев. Одна область, где это даст вам неправильный результат, - это когда у вас есть имена вкладок, такие как Q12021-2022, Q22021-2022, Q12021-2022, Q22021-2022. В идеале вы хотите, чтобы все вкладки за одни и те же годы были вместе, но это не будет сделано, так как Q12021-2022 будет размещен до Q22021-2022.

Куда поместить код VBA

В Excel есть серверная часть VBA, называемая редактором VBA.

Вам необходимо скопировать и вставить код VBA в окно кода модуля VB Editor.

Вот как это сделать:

  1. Перейдите на вкладку «Разработчик». (Не видите вкладку разработчика? Нажмите здесь, чтобы узнать, как ее получить).
  2. Выберите вариант Visual Basic. Это откроет редактор VB в бэкэнде.
  3. На панели Project Explorer в редакторе VB щелкните правой кнопкой мыши любой объект книги, в которую вы хотите вставить код. (Если вы не видите Project Explorer, перейдите на вкладку «View» и нажмите «Project Explorer».)
  4. Перейдите во вкладку "Вставить" и нажмите "Модуль". Это вставит объект модуля для вашей книги.
  5. Скопируйте и вставьте код в окно модуля.

Как запустить код VBA

В Excel есть несколько способов запустить код VBA.

Вы можете запустить код прямо из редактора Visual Basic (также называемого редактором VB).

Вы можете вставить кнопку или фигуру на лист и назначить ей макрос. Когда вы нажимаете на кнопку, макрос запускается мгновенно.

Вы также можете добавить макрос на панель быстрого доступа (QAT). Теперь, когда вам нужно отсортировать вкладки рабочего листа, вы можете просто щелкнуть значок кода макроса в QAT.

Вы можете прочитать все о запуске макроса здесь - Как запустить макрос в Excel (или посмотрите видео ниже).
Вам также могут понравиться следующие руководства по Excel / VBA:

  • Как отсортировать данные в Excel с помощью VBA.
  • Автоматическая сортировка данных в алфавитном порядке с помощью формул.
  • Как сделать многоуровневую сортировку данных в Excel.
  • Введение в параметры сортировки данных Excel.
  • Автофильтр Excel VBA: полное руководство с примерами
  • Как группировать листы в Excel
  • Как перевернуть данные в Excel
wave wave wave wave wave