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

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

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 IEnd Sub

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

Sub SortSheets () Dim I Как целое число Dim sMySheets () как строка Dim iNumSheets Как целое число iNumSheets = Sheets.Count Redim sMySheets (1 в iNumSheets) для I = 1 в iNumSheets sMySheets (I) = Sheets (I) .Name Next I BubbleSort For IMySort iNumSheets Sheets (sMySheets (I)). Move Before: = Sheets (I) Next IEnd Sub Sub BubbleSort (sToSort () As String) Dim Lower As Integer, Upper As Integer Dim I As Integer , J как целое число, K как целое число, K как целое число Dim Temp как строка 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 IEnd Sub

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

Есть еще одно различие между этим вторым макросом и первым. Первый макрос не обращает внимания на регистр текста, используемого для именования ваших листов. Таким образом, “Мой рабочий лист” будет отображаться так же, как “МОЙ РАБОЧИЙ лист”. Второй макрос обращает внимание на регистр текста и выполняет сортировку соответственно. Конечно, это не особенно большая проблема, поскольку Excel также не обращает внимания на регистр в именах листов.

Источник: frestage.ru

Бытовой вопрос