VBA макрос для поиска скрытых строк и столбцов на листе Excel

Постановка задачи

Предположим, что у нас имеется вот такая таблица, с которой приходится “танцевать” каждый день:

Кому таблица покажется маленькой – мысленно умножьте ее по площади в двадцать раз, добавив еще пару кварталов и два десятка крупных российских городов.

Задача – временно убирать с экрана ненужные в данный момент для работы строки и столбцы, т.е.,

  • скрывать подробности по месяцам, оставляя только кварталы
  • скрывать итоги по месяцам и по кварталам, оставляя только итог за полугодие
  • скрывать ненужные в данный момент города (я работаю в Москве – зачем мне видеть Питер?) и т.д.

В реальной жизни примеров таких таблиц – море.

Переименование листов

В VBA Excel есть некоторые особенности в наименовании листов, так как у рабочего листа есть два свойства, связанных с именем: (Name) и Name. Откройте окно «Properties» в редакторе VBA, нажав клавишу «F4», и выделите любой лист в проводнике. Вы увидите, что в окне «Properties» свойству (Name) в скобках соответствует в проводнике уникальное имя листа без скобок, а свойству Name без скобок соответствует изменяемое имя листа в скобках. Оба имени в окне «Properties» можно редактировать.

С помощью кода VBA Excel можно редактировать только имя листа Name, отображаемое на ярлычке листа и в проводнике без скобок. Для этого используется свойство рабочего листа Worksheets.Name со следующим синтаксисом:

expression.Name

где expression – переменная, представляющая собой объект Worksheet. Смена имени осуществляется путем присвоения нового значения свойству Worksheets.Name.

Допустим, у нас есть лист с уникальным именем (Name) – Лист1, индексом – 1 и именем Name – МойЛист, которое необходимо заменить на имя – Реестр.

Как скрыть лист в Excel?

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

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

Группировка

Если выделить несколько строк или столбцов, а затем выбрать в меню Данные – Группа и структура – Группировать (Data – Group and Outline – Group), то они будут охвачены прямоугольной скобкой (сгруппированы). Причем группы можно делать вложенными одна в другую (разрешается до 8 уровней вложенности):

Более удобный и быстрый способ – использовать для группировки выделенных предварительно строк или столбцов сочетание клавиш Alt+Shift+стрелка вправо, а для разгруппировки Alt+Shift+стрелка влево, соответственно.

Такой способ скрытия ненужных данных гораздо удобнее – можно нажимать либо на кнопку со знаком “+” или ““, либо на кнопки с цифровым обозначением уровня группировки в левом верхнем углу листа – тогда все группы нужного уровня будут сворачиваться или разворачиваться сразу.

Кроме того, если в вашей таблице присутствуют итоговые строки или столбцы с функцией суммирования соседних ячеек, то есть шанс (не 100%-ый правда), что Excel сам создаст все нужные группировки в таблице одним движением – через меню Данные – Группа и структура – Создать структуру (Data – Group and Outline – Create Outline). К сожалению, подобная функция работает весьма непредсказуемо и на сложных таблицах порой делает совершенную ерунду. Но попробовать можно.

В Excel 2007 и новее все эти радости находятся на вкладке Данные (Data) в группе Структура (Outline):

Как сделать очень скрытый лист в Excel?

Параметры отображения любого листа в Excel мы можем настроить посредством Visual Basic. Переходим в редактор Visual Basic (на панели вкладок выбираем Разработчик -> Код -> Visual Basic или воспользуемся комбинацией клавиш Alt + F11):

В левой верхней части окна в списке выбираем нужный нам лист и чуть ниже подробно смотрим в блок с настройками (если он изначально не отображается, то уже в панели вкладок Visual Basic выбираем View -> Properties Window и блок появится).

За отображение листа в параметрах отвечает свойство Visible и как мы видим всего есть 3 варианта:

  • xlSheetVisible. Лист открыт и отображается во вкладках;
  • xlSheetHidden. Лист скрыт, но отображается в списке невидимых листов;
  • xlSheetVeryHidden. Лист скрыт и нигде не отображается.

Таким образом, чтобы скрыть лист средствами Visual Basic указываем значение параметра xlSheetHidden, а чтобы показать устанавливаем xlSheetVisible.

Из названия последнего значения xlSheetVeryHidden и взялся термин очень скрытого листа, но в принципе также часто можно встретить употребление выражение супер скрытого. При этом, что очень важно, установить значение параметра xlSheetVeryHidden можно только через Visual Basic, что и не позволяет обычному пользователю обнаружить очень скрытые листы стандартным способом.

Вернемся к нашему примеру.

Так как мы в начале скрывали Лист1, то для него установлена видимость xlSheetHidden, а нас сейчас интересует как раз 3 вариант. Выбираем его и теперь в списке скрытых листов пусто (кнопка в данном случае не активна, хотя мы знаем, что очень скрытые листы в книге на самом деле есть):

Теперь пользователь не увидит такой супер скрытый лист в интерфейсе Excel, однако он все же сможет его обнаружить если зайдет в редактор Visual Basic.

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

Через надстройку VBA-Excel

Самый удобный способ, который не требует специальных знаний, а также позволяет быстро скрыть большое количество листов – установить надстройку VBA-Excel. Для того, чтобы скрыть или отобразить листы в Excel необходимо:

  1. Перейти на вкладку VBA-Excel (доступна после установки надстройки).
  2. В меню Диспетчеры выбрать пункт Диспетчер листов.
  3. В окне диспетчер выберите листы, видимость которых необходимо изменить и нажмите команду Видимость.​

Скрыть строки вручную

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

Как показать скрытый лист в Excel?

Чтобы открыть скрытый лист обратно мы также в нижней панели правой кнопкой мыши щелкаем по любому из листов и выбираем команду Показать. В появившемся окне можно посмотреть все невидимые листы книги (даже если он всего один) и выбрать какой именно лист необходимо вывести на экран:

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

С помощью свойства листов в редакторе кода

Для того чтобы скрыть лист необходимо:

  1. Открыть редактор кода сочетанием клавиш Alt+F11.
  2. В левом меню раскройте проект с одноименным названием вашей книги.
  3. Найдите в списке объектов лист, который необходимо скрыть.
  4. В списке свойств найдите свойство Visible и выберите из списка значений 2 – xlSheetVeryHidden.

Для отображения скрытого листа можно аналогичным способом установить значение -1 – xlSheetVisible.

Скрываем листы

Чтобы скрыть лист (ярлычки в самом низу окна Excel), кликните правой кнопкой мыши по ярлычку, который нужно скрыть, и в контекстном меню нажмите Скрыть
(Hide). Ярлычек исчезнет, но не удалится окончательно.

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

Книга должна содержать не менее одного видимого листа.
Чтобы скрыть, удалить или перенести выделенные листы, необходимо сначала вставить новый лист или сделать видимым скрытый лист.

Чтобы отобразить лист, кликните правой кнопкой мыши по любой видимой вкладке и выберите в появившемся меню Показать
(Unhide).

В появившемся диалоговом окне (Unhide) выберите лист, который хотите сделать видимым, и нажмите ОК.

Замечание:
За одно действие Вы можете сделать видимым только один лист.

Кроме этого, показать скрытые листы можно другим способом. Перейдите на вкладку Главная
(Home). В разделе Ячейки
(Cells) нажмите Формат
(Format). В группе команд Видимость
(Visibility) нажмите Скрыть и отобразить
(Hide & Unhide) и в открывшемся меню выберите Отобразить лист
(Unhide Sheet).

Появится диалоговое окно Вывод на экран скрытого листа
(Unhide). Выберите нужный лист и нажмите ОК, как было описано выше.

Скрываем рабочую книгу полностью

Чтобы полностью скрыть рабочую книгу Excel, перейдите на вкладку Вид
(View).

В разделе Окно
(Window) нажмите Скрыть
(Hide).

Окно Excel останется открытым, но область таблицы станет пустой. Чтобы отобразить рабочую книгу, нажмите Вид
> Окно
> Отобразить
(View > Window > Unhide).

Появится диалоговое окно Вывод на экран скрытого окна книги
(Unhide) со списком открытых в настоящий момент рабочих книг. Если Вы скрывали рабочие книги, которые в данный момент не открыты, то их в этом списке не будет.

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

Иногда возникают ситуации, когда надо скрыть лист со всем его содержимым от посторонних любопытных глаз. Очень часто это делается из контекстного меню листа (для счастливых обладателей 2007 Excel. Подробнее: ). Но при использовании данного метода необходимо защитить книгу, иначе отобразить скрытые листы сможет каждый (тем же правым щелчком мыши — Отобразить).

А что делать, если книгу не надо защищать? Ведь часто необходимо оставить пользователям возможность работы со структурой книги, например, добавлять листы. Как тогда скрыть лист так, чтобы его нельзя было отобразить? Есть достаточно простой способ через редактор VBA, при этом обладать навыком программирования вообще не нужно. Итак, определились какой лист надо скрыть.

Далее:

  1. заходим в редактор VBA(Alt+F11)
  2. жмем сочетание клавиш Ctrl+R или идем в меню ViewProject Explorer
    (чтобы отобразить окно объектов проекта VBA)
  3. жмем F4или через ViewProperties Window
    (чтобы отобразить окно свойств)
  4. в левой части окна (в Project Explorer) ищем книгу, лист в которой надо скрыть и раскрываем её папку(на скрине это VBA Project (Книга1))
  5. раскрываем папку Microsoft Excel Objects и выделяем там лист с нужным именем
  6. в Окне свойств (Properties Window) находим свойство Visibleи назначаем ему значение xlSheetVeryHidden

Чтобы затем отобразить этот лист необходимо свойству Visible задать значение — xlSheetVisible.

При этом для отображения листа необходимо будет обязательно зайти в редактор VBA — простым методом отобразить не получится. И книгу защищать не надо. Что нам и было необходимо.

Для большей надежности можно защитить проект VBA, чтобы не было возможности отобразить лист из VBA, не указав пароль. На функционал это не повлияет совершенно.

В том же окне VBA(Alt+F11):

  1. ToolsVBAProject Properties-вкладка Protection
  2. для защиты устанавливается галочка «Lock project for viewing
  3. вписывается/удаляется сам пароль в полях Passwordи Confirm password.

Скрыть все листы в книге, кроме листа с именем «Видимый» можно следующим макросом:

Sub Hide_All_Sheets() Dim wsSh As Object For Each wsSh In ActiveWorkbook.Sheets If wsSh.Name «Видимый» Then wsSh.Visible = xlSheetVeryHidden «отобразить – xlSheetVisible; сделать лист просто скрытым — xlSheetHidden Next wsSh
End Sub

Скрывать листы можно используя контекстное меню, вызванное правой кнопкой мышки по ярлычку листа. Как было описано в предыдущем уроке. Но листы можно скрывать так, чтобы их не было видно даже в списке скрытых листов. Причем без использования защиты структуры книги. Для реализации данной задачи нужно воспользоваться параметрами, которые доступны в режиме VBA-редактора (Alt+F11).

Полезный Лайфхак в Excel

Чтобы запретить вставку новых строк и столбцов в Excel без использования защиты листа нужно сделать так:

Вот и все теперь в лист нельзя вставить строку или столбец. Если нужно запретить вставлять только строки, тогда вводим любое значение в самую последнюю строку (например, A1048576). А если запретить вставлять только столбцы тогда вводим любое значение в последнем столбце (например, XFD1).

Надежное скрытие листов, которых нельзя отобразить стандартными средствами (опцией Показать). Полезные лайфхаки для работы с листами и ячейками.

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

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

Примечание:
Снимки экрана в этой статье получены в Excel 2016. Если вы используете другую версию, интерфейс может немного отличаться, но функции будут такими же.

Скрытие и отображение окон книг на панели задач Windows

Excel 2013 реализована в Единый интерфейс документа, где каждая книга откроется в отдельном окне. Указанные ниже действия применяются только к Excel 2007 и 2010, для Windows.

Как найти все скрытые строки на листе Excel с помощью макроса

У нас иметься таблица с данными по заказам, но некоторые строки листа скрыты:

Необходимо узнать сколько и какие строки скрытии от визуального анализа таблицы заказов. По умолчанию Excel не располагает таким инструментом, который смог бы решить данную задачу в пару кликов мышкой. Вручную выполнить задачу можно, но сложно. Особенно если после отображения скрытых строк нам нужно снова их скрывать. Кроме того, лист может быть защищен от изменений паролем. Оптимальным решением данной задачи будет написание собственного макроса для отображения информации о скрытых строках.

Чтобы написать свой макрос откройте редактор кода макроса: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

В редакторе вставьте новый модуль выбрав инструмент «Insert»-«Module» и введите в него этот код:

SubHiddenLinesInfo()
DimiAs Long
DimtextAs String
DimpervojAs String
text ="В данном листе скрыты следующие строки: "
Fori = 1ToActiveSheet.Rows.Count
IfActiveSheet.Rows(i).Hidden =True Then
Ifpervoj =""Then
pervoj = i
End If
Else
Ifpervoj <>""Then
text = text & vbNewLine & pervoj &":"& i - 1
pervoj =""
Else
Ifi > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).RowThen
Exit For
End If
End If
End If
Next
MsgBox text
End Sub

Теперь если в таблице заказов необходимо получить информацию о скрытых строках, тогда выберите инструмент для запуска макроса: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«HiddenLinesInfo»-«Выполнить».

В результате после запуска макроса отобразиться сообщение с информацией о всех скрытых строках таблицы заказов.

Скрыть столбцы используя сортировку

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

Таблица в верхнем левом углу

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

Пример таблицы с набором данных в Excel

Вариант 1
Основная формула для поиска последней строки в такой таблице, не требующая соблюдения каких-либо условий:
PosStr = Cells(1, 1).CurrentRegion.Rows.Count

Вариант 2
Ниже таблицы не должно быть никаких записей:
PosStr = ActiveSheet.UsedRange.Rows.Count

Вариант 3
В первом столбце таблицы не должно быть пропусков, а также в таблице должно быть не менее двух заполненных строк, включая строку заголовков:
PosStr = Cells(1, 1).End(xlDown).Row

Вариант 4
В первой колонке рабочего листа внутри таблицы не должно быть пропусков, а ниже таблицы в первой колонке не должно быть других заполненных ячеек:
PosStr = WorksheetFunction.CountA(Range("A:A"))

Вариант 5
Ниже таблицы не должно быть никаких записей:
PosStr = Cells.SpecialCells(xlLastCell).Row

Скрытие и отображение листов

Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

expression.Visible

где expression – переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

  • False – лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
  • xlVeryHidden – лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
  • True – лист становится видимым.

Аналоги присваиваемых значений:

  • False = xlHidden = xlSheetHidden = 1
  • xlVeryHidden = xlSheetVeryHidden = 2
  • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

Примеры:

 
 

Описание работы

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

  1. Открыть вкладку меню VBA-Excel, которая будет доступна после установки программы.
  2. В выпадающем меню Удалить/скрыть пустые выбрать команду Скрыть пустые строки (столбцы при необходимости).

Автоматическое скрытие с использованием надстройки

Более функциональным средством VBA является надстройка, позволяющая удалять и скрывать не только пустые столбцы, но и столбцы, отвечающие условиям пользователя, которые можно задавать в диалоговом окне.

Пользователь на свой выбор может удалять либо скрывать пустые столбцы. Может удалять либо скрывать столбцы, содержащие либо не содержащие заданный текст, при этом на свой выбор учитывать либо не учитывать регистр. Возможен одновременный поиск сразу нескольких текстовых выражений, разделенных знаком ; (точка с запятой). Пользователь также может на свое усмотрение расширять область действия макроса и ограничивать его, задавая номера первого и последнего столбца. Кроме того, надстройка освобождает пользователя от поиска нужного макроса, так как позволяет вызывать диалоговое окно прямо из панели инструментов Excel.

И еще одна надстройка, для скрытия и удаления строк и столбцов, в зависимости от значений ячеек и заданных условий. Работает более гибко, но несколько медленнее, чем первая, так как проверяет не столбцы, а ячейки. Позволяет удалять не только строки и столбцы, но и ячейки с заданными значениями и с заданным сдвигом.

Источники


  • https://www.planetaexcel.ru/techniques/2/121/
  • https://vremya-ne-zhdet.ru/vba-excel/rabochiy-list-obrashcheniye-pereimenovaniye-skrytiye/
  • https://tutorexcel.ru/knigi-i-listy/kak-skryt-i-pokazat-skrytye-listy-v-excel/
  • https://micro-solution.ru/projects/addin_vba-excel/sheets-visible
  • http://macros-vba.ru/makrosy/excel/114-kak-skryt-pustye-stroki-skrytie-pustyh-strok
  • https://iiorao.ru/prochee/kak-sdelat-skrytyj-list-v-excel-nevidimym.html
  • https://exceltable.com/vba-macros/skrytye-stroki-i-stolbcy-vba
  • http://macros-vba.ru/makrosy/excel/115-kak-skryt-pustye-stolbtsy-skrytie-pustyh-stolbtsov
  • https://vremya-ne-zhdet.ru/vba-excel/nomer-posledney-zapolnennoy-stroki/
  • https://micro-solution.ru/projects/addin_vba-excel/hide-range

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все об Экселе: формулы, полезные советы и решения
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: