Как выделить одинаковый диапазон на всех листах рабочей книги?
Если вы часто работаете с многостраничными книгами в Excel, то, вероятно, сталкивались с необходимостью выделять одинаковые диапазоны на всех листах книги. Загвоздка в том, что Excel не предоставляет встроенного способа автоматической синхронизации листов, чтобы они имели одинаковые выделенные диапазоны и левые верхние ячейки. Однако, с помощью макроса, эту задачу можно автоматизировать.
📌 Скачать файл пример с макросом можно в конце статьи
Макрос позволяет выделить одинаковый диапазон (или несколько диапазонов) на всех листах рабочей книги и установить ту же левую верхнюю ячейку, что и на активном листе.
А теперь разберём процедуру:
- Sub ВыделениеДиапазонаВоВсехЛистах() - Эта строка обозначает начало подпрограммы с именем "ВыделениеДиапазонаВоВсехЛистах". Sub указывает на то, что это подпрограмма, а имя подпрограммы следует за ключевым словом Sub.
- If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub - Эта строка проверяет, является ли текущий активный лист объектом типа "Worksheet" (рабочий лист). Если активный лист не является рабочим листом, то выполнение подпрограммы завершается (Exit Sub). Это помогает избежать ошибок выполнения кода на других типах листов, таких как листы диалогов и диаграммы.
- DimВыбранныйЛист As Worksheet, Лист As Worksheet - строка объявляет две переменные: "ВыбранныйЛист" и "Лист", обе типа "Worksheet" (рабочий лист). "ВыбранныйЛист" будет использоваться для хранения ссылки на текущий активный лист, а переменная "Лист" будет использоваться для перебора всех листов в книге.
- DimВерхняяСтрока As Long, ЛевыйСтолбец As Integer - строка объявляет две переменные: "ВерхняяСтрока" типа Long (длинное целое число) и "ЛевыйСтолбец" типа Integer (целое число). Эти переменные будут использоваться для сохранения текущего положения скроллинга (положение прокрутки) окна Excel.
- Dim ВыбранныйДиапазон As String - строка объявляет переменную "ВыбранныйДиапазон" типа String. Она будет использоваться для хранения адреса выделенного диапазона на текущем активном листе.
- Application.ScreenUpdating = False - строка отключает обновление экрана при выполнении макроса, что улучшает производительность, так как Excel не будет перерисовывать экран после каждого изменения.
- Set ВыбранныйЛист = ActiveSheet - строка присваивает переменной "ВыбранныйЛист" ссылку на текущий активный лист.
- ВерхняяСтрока = ActiveWindow.ScrollRow - строка сохраняет номер строки, на которой находится верхняя часть окна Excel (текущее положение скроллинга вертикальной полосы прокрутки).
- ЛевыйСтолбец = ActiveWindow.ScrollColumn - строка сохраняет номер столбца, на котором находится левая часть окна Excel (текущее положение скроллинга горизонтальной полосы прокрутки).
- ВыбранныйДиапазон = ActiveWindow.RangeSelection.Address - строка сохраняет адрес выделенного диапазона на текущем активном листе.
- For EachЛист In ActiveWorkbook.Worksheets строка начинает цикл, в котором каждый лист в рабочей книге будет поочередно присваиваться переменной "Лист".
- If Лист.Visible Then ' пропускаем скрытые листы - строка проверяет, видимый ли текущий лист. Если лист видимый, то код внутри условия будет выполнен.
- Лист.Activate- строка активирует текущий лист, чтобы можно было выполнить операции на нем.
- Range(ВыбранныйДиапазон).Select - строка выделяет на текущем листе тот же диапазон, который был выделен на исходном листе.
15. ActiveWindow.ScrollRow = ВерхняяСтрока - строка устанавливает верхнюю строку окна Excel в ту же позицию, что и на исходном листе.
16. ActiveWindow.ScrollColumn = ЛевыйСтолбец - строка устанавливает левый столбец окна Excel в ту же позицию, что и на исходном листе.
17. Next Лист - строка завершает цикл "For Each", переходя к следующему листу в книге.
18. ВыбранныйЛист.Activate- строка активирует исходный лист, на котором была запущена подпрограмма.
19. Application.ScreenUpdating = True - строка включает обновление экрана после выполнения макроса.
20. End Sub - строка обозначает конец подпрограммы.