Excel отобразить скрытые строки vba
Добрый день!
Вот такой вариант:
При любом изменении ячеек на листе "данные", проверяем на нули 1 столбец листа "итоги", если 0 - скрыть строку, в противном случае показать.
Добавьте обработчик в модуль листа "данные".
[vba]
Добрый день!
Вот такой вариант:
При любом изменении ячеек на листе "данные", проверяем на нули 1 столбец листа "итоги", если 0 - скрыть строку, в противном случае показать.
Добавьте обработчик в модуль листа "данные".
[vba]
Спасибо Mikael огромное. Макрос работает, но есть одно но, или даже несколько.
Дело в том, что в реальном примере, на листе «итоги» присутствует кнопка(и) (своего рода сопоставление данных по годам), которые отображают/скрывают суммарную информацию о работе сотрудника с других листов и к ним прикреплен макрос:
[vba]
Sub Click_2014()
Worksheets("итоги").Unprotect Password:="123456"
Columns("J:V").Hidden = IIf(Columns("J:V").Hidden, False, True)
Worksheets("итоги").Protect Password:="123456"
End Sub
[/vba]
Соответственно, когда срабатывает макрос, то он автоматически делает видимыми все ранее скрытые строки, которые спрятал предыдущий макрос.
Возможно, ли сделать так, чтобы макрос, который написали Вы:
1. реагировал на изменения и скрывал строки только в определенном диапазоне(ах), например A10:A40, A45:A60, A70:A90 и т.д.?
2. работал на нескольких листах, например «итоги» и «итоги_2»?
И еще:
- практически все листы в книге скрываются автоматически, т.к. используется оглавление;
- практически все защищены паролем, от «кривых» рук и ввод данных разрешен в определенных ячейках.
Спасибо!!
Спасибо Mikael огромное. Макрос работает, но есть одно но, или даже несколько.
Дело в том, что в реальном примере, на листе «итоги» присутствует кнопка(и) (своего рода сопоставление данных по годам), которые отображают/скрывают суммарную информацию о работе сотрудника с других листов и к ним прикреплен макрос:
[vba]
Sub Click_2014()
Worksheets("итоги").Unprotect Password:="123456"
Columns("J:V").Hidden = IIf(Columns("J:V").Hidden, False, True)
Worksheets("итоги").Protect Password:="123456"
End Sub
[/vba]
Соответственно, когда срабатывает макрос, то он автоматически делает видимыми все ранее скрытые строки, которые спрятал предыдущий макрос.
Возможно, ли сделать так, чтобы макрос, который написали Вы:
1. реагировал на изменения и скрывал строки только в определенном диапазоне(ах), например A10:A40, A45:A60, A70:A90 и т.д.?
2. работал на нескольких листах, например «итоги» и «итоги_2»?
И еще:
- практически все листы в книге скрываются автоматически, т.к. используется оглавление;
- практически все защищены паролем, от «кривых» рук и ввод данных разрешен в определенных ячейках.
Спасибо!! graffserg
Sub Click_2014()
Worksheets("итоги").Unprotect Password:="123456"
Columns("J:V").Hidden = IIf(Columns("J:V").Hidden, False, True)
Worksheets("итоги").Protect Password:="123456"
End Sub
[/vba]
Соответственно, когда срабатывает макрос, то он автоматически делает видимыми все ранее скрытые строки, которые спрятал предыдущий макрос.
Возможно, ли сделать так, чтобы макрос, который написали Вы:
1. реагировал на изменения и скрывал строки только в определенном диапазоне(ах), например A10:A40, A45:A60, A70:A90 и т.д.?
2. работал на нескольких листах, например «итоги» и «итоги_2»?
И еще:
- практически все листы в книге скрываются автоматически, т.к. используется оглавление;
- практически все защищены паролем, от «кривых» рук и ввод данных разрешен в определенных ячейках.
Спасибо!! Автор - graffserg
Дата добавления - 17.01.2018 в 10:06
Довольно часто появляется необходимость в Excel скрывать или отображать строки или столбцы. Особенно это актуально, когда на листе размещается очень много информации и часть из них является вспомогательной и требуется не всегда и тем самым загромождает пространство, ухудшая восприятие. Если это приходится делать часто, то делать это с помощью меню неудобно, особенно если приходится скрывать и отображать разные столбцы и строки.
Для существенного удобства можно написать простенький макрос, привязав его к кнопке и делать это одним щелком мыши.
Вот так выглядят простые примеры, с помощью которых Вы без труда сможете скрывать или отображать строки и столбцы с помощью VBA
Пример 1: Скрыть строку 2 в Excel
Sub HideString() ‘Это название макроса
Rows(2).Hidden = True
End Sub
Пример 2: Скрыть несколько строк в Excel (строку 3-5)
Sub HideStrings()
Rows(«3:5»).Hidden = True
End Sub
Пример 3: Скрыть столбец 2 в Excel
Sub HideCollumn()
Columns(2).Hidden = True
End Sub
Пример 4: Скрытие нескольких столбцов в Excel
Sub HideCollumns()
Columns(«E:F»).Hidden = True
End Sub
Пример 5: Скрытие строки по имени ячейки в Excel
Sub HideCell()
Range(«Возможности Excel»).EntireRow.Hidden = True
End Sub
Пример 6: Скрытие нескольких строк по адресам ячеек
Sub HideCell()
Range(«B3:D4»).EntireRow.Hidden = True
End Sub
Пример 7: Скрытие столбца по имени ячейки
Sub HideCell()
Range(«Возможности Excel»).EntireColumn.Hidden = True
End Sub
Пример 8: Скрытие нескольких столбцов по адресам ячеек
Sub HideCell()
Range(«C2:D5»).EntireColumn.Hidden = True
End Sub
Как видите процесс автоматического скрытия строк и столбцов очень прост, а применений данному приему огромное множество.
Для того, чтобы отобразить строки и столбцы в Excel вы можете воспользоваться этими же макросами, но вместе True необходимо указать False
Например, макрос для того, чтобы отобразить строку 2 будет выглядеть следующим образом:
Sub ViewString()
Rows(2).Hidden = False
End Sub
Надеемся, что данная статья была полезна вам и ответила на вопрос: как скрыть или отобразить строки и столбцы в Excel с помощью VBA
Спасибо за внимание.
Related posts:
Похожие статьи
Что делать если условием таблицы является скрытие столбцов по условию: содержание в ячейках определенного значения? Нужен макрос? Можете помочь?
Например: Есть таблица со строками содержащими в заголовке название рыб (200 строк) и столбцами содержащими в заголовке название наживки для рыб(50 столбцов). В таблице есть диапазон содержащий в ячейках символ Х и символ Y. Используя стандартный фильтр выбираю в одном из столбцов «фильтровать по значению Х» Требуется: Выделив все ячейки оставшегося после фильтрации диапазона(например осталось только 20 строк названий рыб и все 50 столбцов названий наживки) скрыть СТОЛБЦЫ в которых ячейки диапазона не содержат хотя бы 1 символ Х (например в результате получиться 20 строк названий рыб и всего 5 СТОЛБЦОВ названий наживки)
Добрый день!
Выдает ошибку на многоточие и макрос не срабатывает 🙁 как быть в этой ситуации.
Пример 4: Скрытие нескольких столбцов в Excel
Sub HideCollumns()
Columns(«E:F»).Hidden = True
End Sub
Здравствуйте!
Подскажите, пжл, что делаю не так .
В примере №7, выдаёт ошибку 400, пишет:
«Method ‘Range’of object’_Worksheet’failed»
Подскажите, пожалуйста, как сделать, чтобы в примере №7, макрос ссылался бы НЕ на ИМЯ ячейки, а на ЗНАЧЕНИЕ, которое есть в ячейке ?
Иными словами, если ячейки А1, А2, А3 — содержать значение «хотим скрыть эти строки», то макрос скрывает эти строки (т.е. — строки 1, 2 и 3).
Если в какой-либо ячейке — иное значение, то, соответственно, эта строка НЕ скрывается.
Зараенее спасибо за ответ.
Спасибо за макрос!
Но адаптировать под себя — оказалось для меня слишком сложно ((.
Буду благодарен, если подскажите, как реализовать такую процедуру:
На ЗАЩИЩЁННОМ листе — две кнопки «Скрыть» и «Отобразить»
При нажатии кнопки «Скрыть» — происходит скрытие всех строк, одна из ячеек которых (скажем, все такие ячейки расположены в одном столбце «D») содержит значение «Счёт закрыт».
Лист при этом остаётся ЗАЩИЩЁННЫМ.
И, соответственно, при нажатии кнопки «Отобразить» — все скрытые строки — отображаются. Лист также остаётся защищённым.
Заранее спасибо !
А вот такой вопрос. Есть диапазон в 31 столбец, как скрыть столбцы выходящие за предел диапазона в зависимости от продолжительности месяца. то есть, если, к примеру февраль, то скрыть 3 или 2 последних столбца в диапазоне. Заранее спасибо за ответ !
Можно воспользоваться простеньким макрос скрытия столбцов по определенному условию (в данном случае, если в перовой строке есть цифра 1).
Sub Col() ‘Скрыть столбцы
Application.ScreenUpdating = False
For Each s In Cells(1, 1).CurrentRegion.Rows(1).Cells
Columns(s.Column).EntireColumn.Hidden = s.Value = 1
Next s
Application.ScreenUpdating = True
End Sub
Sub all() ‘Отобразить все
Application.ScreenUpdating = False
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Application.ScreenUpdating = True
End Sub
Данные исходные коды VBA-макросов умеют быстро находить все скрытые строки и столбцы на листе Excel. Также они выводят всю информацию о скрытых строках и столбцах. Номера строк отображаются числами, а номера столбцов преобразуются в буквы заголовков, что очень удобно.
Как найти все скрытые строки на листе Excel с помощью макроса
У нас иметься таблица с данными по заказам, но некоторые строки листа скрыты:
Необходимо узнать сколько и какие строки скрытии от визуального анализа таблицы заказов. По умолчанию Excel не располагает таким инструментом, который смог бы решить данную задачу в пару кликов мышкой. Вручную выполнить задачу можно, но сложно. Особенно если после отображения скрытых строк нам нужно снова их скрывать. Кроме того, лист может быть защищен от изменений паролем. Оптимальным решением данной задачи будет написание собственного макроса для отображения информации о скрытых строках.
Чтобы написать свой макрос откройте редактор кода макроса: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:
В редакторе вставьте новый модуль выбрав инструмент «Insert»-«Module» и введите в него этот код:
Sub HiddenLinesInfo()
Dim i As Long
Dim text As String
Dim pervoj As String
text = "В данном листе скрыты следующие строки: "
For i = 1 To ActiveSheet.Rows.Count
If ActiveSheet.Rows(i).Hidden = True Then
If pervoj = "" Then
pervoj = i
End If
Else
If pervoj <> "" Then
text = text & vbNewLine & pervoj & ":" & i - 1
pervoj = ""
Else
If i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row Then
Exit For
End If
End If
End If
Next
MsgBox text
End Sub
Теперь если в таблице заказов необходимо получить информацию о скрытых строках, тогда выберите инструмент для запуска макроса: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«HiddenLinesInfo»-«Выполнить».
Описание исходного VBA-кода для поиска скрытых строк
В начале данного кода объявляются сразу 3 переменные:
- К тексту в переменной text дописывается (с новой строки) номер первой скрытой строки из текущей группы скрытых строк.
- К тексту в переменной text дописывается двоеточие и номер последней строки из текущей группы строк. Данное значение взято из счетчика цикла текущее числовое значение в переменной i-1.
- Удаляется значение из переменной pervoj. Таким образом создается возможность для запуска этих же операций для следующей группы скрытых строк.
В конце кода макроса выполняются инструкции для последнего условия. Если проверяемая текущая строка не является скрытой и находиться ниже последней ячейки используемого диапазона листа, тогда выполняется выход из цикла проверки строк на скрытость.
Примечание. Последняя ячейка используемого диапазона листа – это последняя ячейка, которая имеет любое изменение: новое значение, новый формат отображения значений, измененный цвет заливки тип границ. И максимально отдаленная от первой ячейки листа A1.
Если исходная таблица не содержит ни одной скрытой строки, тогда после запуска макроса будет отображаться только первая строка текста из переменной text: «В данном листе скрыты следующие строки:»
Dim HidViz As Boolean
В ней будет содержаться одно из двух традиционных логических значений True or Fasle (истина или ложь), в зависимости от того будет ли таблица содержать хотя-бы одну скрытую строку или нет. Далее после строки кода макроса:
If ActiveSheet.Rows(i).Hidden = True Then
дописываем инструкцию изменяющую логическое значение для переменной HidViz:
Дополнительно в конце кода перед строкой:
If HidViz = False Then text = "На текущем листе нет ни одной скрытой строки!"
Полная версия измененного кода макроса выглядит так:
Sub HiddenLinesInfo()
Dim i As Long
Dim text As String
Dim pervoj As String
Dim HidViz As Boolean
text = "В данном листе скрыты следующие строки: "
For i = 1 To ActiveSheet.Rows.Count
If ActiveSheet.Rows(i).Hidden = True Then
HidViz = True
If pervoj = "" Then
pervoj = i
End If
Else
If pervoj <> "" Then
text = text & vbNewLine & pervoj & ":" & i - 1
pervoj = ""
Else
If i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row Then
Exit For
End If
End If
End If
Next
If HidViz = False Then text = "На текущем листе нет ни одной скрытой строки!"
MsgBox text
End Sub
Результат действия измененного макроса в тому случаи если скрытые строки отсутствуют:
Поиск скрытых столбцов на листе Excel используя VBA-макрос
Но что если необходимо сделать так чтобы макрос показывал информацию не о скрытых строках, а и о скрытых столбцах таблицы:
В таком случае сделаем так:
pervoj = Split(Cells(1, i).Address, "$")(1)
text = text & vbNewLine & pervoj & ":" & i – 1
text = text & vbNewLine & pervoj & ":" & Split(Cells(1, i - 1).Address, "$")(1)
Код макроса для получения информации о скрытых столбцах в таблице выглядит следующим образом:
Sub HiddenColumnInfo()
Dim i As Long
Dim text As String
Dim pervoj As String
Dim HidViz As Boolean
text = "В данном листе скрыты следующие столбцы: "
For i = 1 To ActiveSheet.Columns.Count
If ActiveSheet.Columns(i).Hidden = True Then
HidViz = True
If pervoj = "" Then
pervoj = Split(Cells(1, i).Address, "$" )(1)
End If
Else
If pervoj <> "" Then
text = text & vbNewLine & pervoj & ":" & Split(Cells(1, i - 1).Address, "$" )(1)
pervoj = ""
Else
If i > ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column Then
Exit For
End If
End If
End If
Next
If HidViz = False Then text = "На текущем листе нет ни одного скрытого столбца!"
MsgBox text
End Sub
Пример работы макроса HiddenColumnInfo в действии:
Таким образом мы создали новый макрос, который предназначен для работы со скрытыми столбцами. За основу использовали предыдущий код макроса.
В этот же модуль можно написать еще один 3-тий макрос, который будет вызывать поочередно эти два макроса описаны в данном примере. Одним словом, с помощью простейшего кода VBA выполним запуск двух макросов из другого макроса Excel:
Этот макрос сначала позволит нам получить всю информацию о скрытых строках, а потом и о скрытых столбцах таблицы в один клик мышкой. Теперь нам не нужно по отдельности запускать оба макроса, достаточно лишь запустить их из «РАЗРАБОТЧИК»-«Код»-«Макросы»-«HiddenLineColumnInfo»-«Выполнить».
При работе в Excel иногда возникает необходимость скрыть часть отображаемых данных.
Наиболее удобный способ – это скрыть отдельные столбцы или строки. Например, во время презентации или перед подготовкой документа на печать.
Как скрыть столбцы и строки в Excel?
Допустим, у нас есть таблица, где нам нужно отобразить только самые важные данные для более удобного чтения показателей. Для этого делаем так:
- Выделите столбец данные которого следует скрыть. Например, столбец C.
- По выделенному столбцу щелкните правой кнопкой мышки и выберите опцию «Скрыть» CTRL + 0 (для столбцов) CTRL + 9 (для строк).
Столбец скрылся, но не удалился. Об этом свидетельствует поочередность букв алфавита в названиях столбцов (A;B;D;E).
Примечание. Если нужно скрыть много столбцов, выделите их перед скрытием. Выделять можно выборочно несколько столбцов с зажатой клавишей CTRL. Аналогичным способом можно скрывать и строки.
Как отобразить скрытые столбцы и строки в Excel?
Чтобы снова отобразить скрытый столбец необходимо выделить 2 его смежных (соседних) столбца. Потом вызвать контекстное меню правой кнопкой мышки и выбрать опцию «Показать».
Аналогичные действия выполняем, чтобы открыть скрытые строки в Excel.
Если на листе скрыто много строк и столбцов и есть необходимость отобразить сразу все, нужно выделить весь лист нажатием комбинации CTRL+A. Дальше отдельно вызвать контекстное меню для столбцов, чтобы выбрать опцию «Показать», а потом для строк. Или в обратном порядке (для строк потом для колонок).
Выделить весь лист можно щелкнув на пересечение заголовков колонок и строк.
Об этих и других способах выделения целого листа и диапазонов вы уже знаете из предыдущих уроков.
Предположим, что у нас имеется вот такая таблица, с которой приходится "танцевать" каждый день:
Кому таблица покажется маленькой - мысленно умножьте ее по площади в двадцать раз, добавив еще пару кварталов и два десятка крупных российских городов.
Задача - временно убирать с экрана ненужные в данный момент для работы строки и столбцы, т.е.,
- скрывать подробности по месяцам, оставляя только кварталы
- скрывать итоги по месяцам и по кварталам, оставляя только итог за полугодие
- скрывать ненужные в данный момент города (я работаю в Москве - зачем мне видеть Питер?) и т.д.
В реальной жизни примеров таких таблиц - море.
Способ 1. Скрытие строк и столбцов
Способ, прямо скажем, примитивный и не очень удобный, но два слова про него сказать можно. Любые выделенные предварительно строки или столбцы на листе можно скрыть, щелкнув по заголовку столбца или строки правой кнопкой мыши и выбрав в контекстном меню команду Скрыть (Hide) :
Для обратного отображения нужно выделить соседние строки/столбцы и, щелкнув правой кнопкой мыши, выбрать в меню, соответственно, Отобразить (Unhide) .
Проблема в том, что с каждым столбцом и строкой придется возиться персонально, что неудобно.
Способ 2. Группировка
Если выделить несколько строк или столбцов, а затем выбрать в меню Данные - Группа и структура - Группировать (Data - Group and Outline - Group) , то они будут охвачены прямоугольной скобкой (сгруппированы). Причем группы можно делать вложенными одна в другую (разрешается до 8 уровней вложенности):
Более удобный и быстрый способ - использовать для группировки выделенных предварительно строк или столбцов сочетание клавиш Alt+Shift+стрелка вправо, а для разгруппировки Alt+Shift+стрелка влево, соответственно.
Такой способ скрытия ненужных данных гораздо удобнее - можно нажимать либо на кнопку со знаком "+" или "-", либо на кнопки с цифровым обозначением уровня группировки в левом верхнем углу листа - тогда все группы нужного уровня будут сворачиваться или разворачиваться сразу.
Кроме того, если в вашей таблице присутствуют итоговые строки или столбцы с функцией суммирования соседних ячеек, то есть шанс (не 100%-ый правда), что Excel сам создаст все нужные группировки в таблице одним движением - через меню Данные - Группа и структура - Создать структуру (Data - Group and Outline - Create Outline) . К сожалению, подобная функция работает весьма непредсказуемо и на сложных таблицах порой делает совершенную ерунду. Но попробовать можно.
В Excel 2007 и новее все эти радости находятся на вкладке Данные (Data) в группе Структура (Outline) :
Способ 3. Скрытие помеченных строк/столбцов макросом
Этот способ, пожалуй, можно назвать самым универсальным. Добавим пустую строку и пустой столбец в начало нашего листа и отметим любым значком те строки и столбцы, которые мы хотим скрывать:
Теперь откроем редактор Visual Basic (ALT+F11), вставим в нашу книгу новый пустой модуль (меню Insert - Module) и скопируем туда текст двух простых макросов:
Как легко догадаться, макрос Hide скрывает, а макрос Show - отображает обратно помеченные строки и столбцы. При желании, макросам можно назначить горячие клавиши (Alt+F8 и кнопка Параметры), либо создать прямо на листе кнопки для их запуска с вкладки Разработчик - Вставить - Кнопка (Developer - Insert - Button) .
Способ 4. Скрытие строк/столбцов с заданным цветом
Допустим, что в приведенном выше примере мы, наоборот, хотим скрыть итоги, т.е. фиолетовые и черные строки и желтые и зеленые столбцы. Тогда наш предыдущий макрос придется немного видоизменить, добавив вместо проверки на наличие "х" проверку на совпадение цвета заливки с произвольно выбранными ячейками-образцами:
Однако надо не забывать про один нюанс: этот макрос работает только в том случае, если ячейки исходной таблицы заливались цветом вручную, а не с помощью условного форматирования (это ограничение свойства Interior.Color). Так, например, если вы с помощью условного форматирования автоматически подсветили в своей таблице все сделки, где количество меньше 10:
. и хотите их скрывать одним движением, то предыдущий макрос придется "допилить". Если у вас Excel 2010-2013, то можно выкрутиться, используя вместо свойства Interior свойство DisplayFormat.Interior, которое выдает цвет ячейки вне зависимости от способа, которым он был задан. Макрос для скрытия синих строк тогда может выглядеть так:
Ячейка G2 берется в качестве образца для сравнения цвета. К сожалению, свойство DisplayFormat появилось в Excel только начиная с 2010 версии, поэтому если у вас Excel 2007 или старше, то придется придумывать другие способы.
Читайте также: