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

Sub SortSheets1()

Dim I As Integer     Dim 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

Этот макрос сортирует вкладки рабочего листа по имени в порядке возрастания. Если вы хотите отсортировать их в порядке убывания, все, что вам нужно сделать, это изменить> в центральной линии на <.

Макрос отлично работает, если у вас относительно небольшое количество листов в вашей книге. Если при запуске макроса вы заметите, что для его выполнения требуется много времени, возможно, вы захотите использовать в макросе более эффективный алгоритм сортировки. Например, следующая версия представляет собой версию, которая считывает имена всех рабочих листов в массив, сортирует массив с помощью алгоритма BubbleSort, а затем выполняет фактическую компоновку:

Sub SortSheets2()

Dim I As Integer     Dim sMySheets() As String     Dim iNumSheets As Integer

iNumSheets = Sheets.Count     Redim sMySheets(1 To iNumSheets)



For I = 1 To iNumSheets         sMySheets(I) = Sheets(I).Name     Next I

BubbleSort sMySheets

For I = 1 To iNumSheets         Sheets(sMySheets(I)).Move Before:=Sheets(I)

Next I End Sub
Sub BubbleSort(sToSort() As String)

Dim Lower As Integer     Dim Upper As Integer     Dim I As Integer     Dim J As Integer     Dim K As Integer     Dim Temp As String

Lower = LBound(sToSort)

Upper = UBound(sToSort)

For I = Lower To Upper - 1         K = I         For J = I + 1 To Upper             If sToSort(K) > sToSort(J) Then                 K = J             End If         Next J         If I <> K Then             Temp = sToSort(I)

sToSort(I) = sToSort(K)

sToSort(K) = Temp         End If     Next I End Sub

Любой, кто какое-то время программировал, знает, что BubbleSort — это хорошая процедура сортировки общего назначения, но есть и более быстрые.

Например, если у вас довольно много рабочих листов, и они начинаются очень неорганизованно, вы можете обнаружить, что алгоритм QuickSort более полезен. Все, что вам нужно сделать, чтобы изменить приведенное выше для использования QuickSort, это добавить алгоритм QuickSort в качестве подпрограммы (вы можете найти алгоритм в любой хорошей книге по программированию на Visual Basic), а затем вызвать процедуру из основного макроса SortSheets. (Это означает изменение строки, в которой теперь вызывается BubbleSort.)

Есть еще одно различие между этим вторым макросом и первым. Первый макрос не обращает внимания на регистр текста, используемого для именования ваших листов. Таким образом, MyWorksheet будет отображаться так же, как MYWORKsheet. Второй макрос обращает внимание на регистр текста и выполняет сортировку соответственно. Конечно, это не особо большая проблема, поскольку Excel также не обращает внимания на регистр в именах листов.

Небольшое примечание: приведенная выше процедура BubbleSort носит универсальный характер. Это означает, что он будет работать для сортировки любого массива, а не только для сортировки имен вкладок рабочего листа.

_Примечание: _

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

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (13440) применим к Microsoft Excel 2007, 2010, 2013 и 2016.

Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Alphabetizing_Worksheet_Tabs [Алфавитный указатель вкладок рабочего листа].