Что делает макрос: Многие из нас хотят сгруппировать листы по цвету, чтобы визуально увидеть, что данные в определенной закладке каким-то образом связаны с другой вкладкой, потому что обе имеют один и тот же цвет. Данный макрос облегчает эту функцию.
Как макрос работает
Excel присваивает номер индекса для каждого цвета. Светло-желтый цвет имеет порядковый номер 36, в то время как цвет темно-бордовый имеет порядковый номер 42. Данный макрос перебирает листы в книге, сопоставляя индексы. Цвет вкладки текущего листа, такой же что и предыдущий. Если предыдущий лист имеет тот же номер индекса цвета, что и текущий лист, макрос перемещает текущий лист перед ним. Таким образом, все итерации сделаны, все листы сгруппированы вместе на основе их закладке цветов.
Код макроса
Sub SgruppirovatListiPoCvetu()
'Шаг 1: Объявляем переменные
Dim CurrentSheetIndex As Integer
Dim PrevSheetIndex As Integer
'Шаг 2: Устанавливаем начальный пункт и начинаем цикл
For CurrentSheetIndex = 1 To Sheets.Count
For PrevSheetIndex = 1 To CurrentSheetIndex - 1
'Шаг 3: Сравниваем индекс цвета текущего листа с предыдущим
If Sheets(PrevSheetIndex).Tab.ColorIndex = _
Sheets(CurrentSheetIndex).Tab.ColorIndex Then
'Шаг 4: Если индекс цвета предыдущего листа равен показателю цвета 'текущего листа переместить текущий лист перед предыдущим
Sheets(PrevSheetIndex).Move _
Before:=Sheets(CurrentSheetIndex)
End If
'Шаг 5: Возвращаемся в п.2
Next PrevSheetIndex
Next CurrentSheetIndex
End Sub
Как работает это код
- Шаг 1 объявляет две переменные. CurrentSheetIndex содержит номер индекса для текущей итерации листа, а переменная PrevSheetIndex содержит номер индекса для предыдущей
итерации листа. - Шаг 2 начинает итерации счетчика для обеих переменных. Обратите внимание, что счетчик для PrevSheetIndex одно число за CurrentSheetIndex. После того, как счетчики установлены, то макрос начинает цикл.
- На шаге 3, макрокоманда проверяет, является ли показатель цвета предыдущего листа таким же, как и у текущего листа. Обратите внимание на использование свойства Tab.ColorIndex.
- Шаг 4 достигается только, если индекс цвета предыдущего листа равен показателю цвета текущего листа. На этом этапе, макрокоманда используется метод Move для перемещения текущего листа перед предыдущим листом.
- На шаге 5, макрокоманда переходит обратно к началу цикла. Каждая итерация приращений цикла обоих переменных до одного числа до последнего листа прикосновении. После того как все итерации закончились, макрос заканчивается.
Как использовать
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши personal.xlb в окне Project.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.