Распределение вкладок рабочего листа в алфавитном порядке (Microsoft Excel)
Пэт задается вопросом, есть ли быстрый способ расположить рабочие листы в своей книге по алфавиту. Для этого нет встроенного метода, но можно использовать макрос для сортировки за вас. В этом совете я представлю два подхода. Первый обеспечивает простой способ сортировки.
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 [Алфавитный указатель вкладок рабочего листа]
.