Макросы excel отобразить строки

Скрытие/отображение ненужных строк и столбцов

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

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

outline1.gif

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

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

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

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

Способ 1. Скрытие строк и столбцов

Способ, прямо скажем, примитивный и не очень удобный, но два слова про него сказать можно. Любые выделенные предварительно строки или столбцы на листе можно скрыть, щелкнув по заголовку столбца или строки правой кнопкой мыши и выбрав в контекстном меню команду Скрыть (Hide):

outline2.gif

Для обратного отображения нужно выделить соседние строки/столбцы и, щелкнув правой кнопкой мыши, выбрать в меню, соответственно, Отобразить (Unhide).

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

Способ 2. Группировка

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

outline3.gif

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

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

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

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

outline5.gif

Способ 3. Скрытие помеченных строк/столбцов макросом

Этот способ, пожалуй, можно назвать самым универсальным. Добавим пустую строку и пустой столбец в начало нашего листа и отметим любым значком те строки и столбцы, которые мы хотим скрывать:

outline4.gif

Теперь откроем редактор Visual Basic (ALT+F11), вставим в нашу книгу новый пустой модуль (меню Insert — Module) и скопируем туда текст двух простых макросов:

Sub Hide()
    Dim cell As Range
    Application.ScreenUpdating = False                              'отключаем обновление экрана для ускорения
    For Each cell In ActiveSheet.UsedRange.Rows(1).Cells            'проходим по всем ячейкам первой строки
        If cell.Value = "x" Then cell.EntireColumn.Hidden = True    'если в ячейке x - скрываем столбец
    Next
    For Each cell In ActiveSheet.UsedRange.Columns(1).Cells         'проходим по всем ячейкам первого столбца
        If cell.Value = "x" Then cell.EntireRow.Hidden = True       'если в ячейке x - скрываем строку
    Next
    Application.ScreenUpdating = True
End Sub

Sub Show()
    Columns.Hidden = False   'отменяем все скрытия строк и столбцов
    Rows.Hidden = False
End Sub

Как легко догадаться, макрос Hide скрывает, а макрос Show — отображает обратно помеченные строки и столбцы. При желании, макросам можно назначить горячие клавиши (Alt+F8 и кнопка Параметры), либо создать прямо на листе кнопки для их запуска с вкладки Разработчик — Вставить — Кнопка (Developer — Insert — Button).

Способ 4. Скрытие строк/столбцов с заданным цветом

Допустим, что в приведенном выше примере мы, наоборот, хотим скрыть итоги, т.е. фиолетовые и черные строки и желтые и зеленые столбцы. Тогда наш предыдущий макрос придется немного видоизменить, добавив вместо проверки на наличие «х» проверку на совпадение цвета заливки с произвольно выбранными ячейками-образцами:

Sub HideByColor()
    Dim cell As Range
    Application.ScreenUpdating = False
    For Each cell In ActiveSheet.UsedRange.Rows(2).Cells
        If cell.Interior.Color = Range("F2").Interior.Color Then cell.EntireColumn.Hidden = True
        If cell.Interior.Color = Range("K2").Interior.Color Then cell.EntireColumn.Hidden = True
    Next
    For Each cell In ActiveSheet.UsedRange.Columns(2).Cells
        If cell.Interior.Color = Range("D6").Interior.Color Then cell.EntireRow.Hidden = True
        If cell.Interior.Color = Range("B11").Interior.Color Then cell.EntireRow.Hidden = True
    Next
    Application.ScreenUpdating = True
End Sub

Однако надо не забывать про один нюанс: этот макрос работает только в том случае, если ячейки исходной таблицы заливались цветом вручную, а не с помощью условного форматирования (это ограничение свойства Interior.Color). Так, например, если вы с помощью условного форматирования автоматически подсветили в своей таблице все сделки, где количество меньше 10:

outline7.png

…и хотите их скрывать одним движением, то предыдущий макрос придется «допилить». Если у вас Excel 2010-2013, то можно выкрутиться, используя вместо свойства Interior свойство DisplayFormat.Interior, которое выдает цвет ячейки вне зависимости от способа, которым он был задан. Макрос для скрытия синих строк тогда может выглядеть так:

Sub HideByConditionalFormattingColor()
    Dim cell As Range
    Application.ScreenUpdating = False
    For Each cell In ActiveSheet.UsedRange.Columns(1).Cells
        If cell.DisplayFormat.Interior.Color = Range("G2").DisplayFormat.Interior.Color Then cell.EntireRow.Hidden = True
    Next
    Application.ScreenUpdating = True
End Sub

Ячейка G2 берется в качестве образца для сравнения цвета. К сожалению, свойство DisplayFormat появилось в Excel только начиная с 2010 версии, поэтому если у вас Excel 2007 или старше, то придется придумывать другие способы.

Ссылки по теме

  • Что такое макрос, куда вставлять код макроса, как их использовать
  • Автоматическая группировка в многоуровневых списках

Skip to content

Как отобразить все скрытые строки и столбцы

На чтение 1 мин. Просмотров 9.1k.

Что делает макрос: При просмотре электронных таблиц, которые созданы не вами, вы хотите убедиться, что получаете полное представление о том, что именно в электронной таблице. Для этого вам необходимо убедиться, что никакие столбцы и строки не скрыты. Этот простой макрос автоматически позволит отобразить сразу все скрытые строки и столбцы для вас.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как использовать

Как макрос работает

В этом макросе, мы демонстрируем коллекции Columns и коллекции Rows рабочего листа. Каждая коллекция имеет свойства, которые диктуют, где их объекты скрыты или видны. Этот макрос позволяет отобразить каждый столбец в коллекции Columns и каждую строку в коллекции Rows.

Код макроса

Sub OtobrazitSkritieStrokiStolbci()
Columns.EntireColumn.Hidden = False
Rows.EntireRow.Hidden = False
End Sub

Как использовать

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши personal.xlb в окне Project.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

Довольно часто появляется необходимость в 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

Спасибо за внимание.

Как скрыть или отобразить строки и столбцы с помощью свойства Range.Hidden из кода VBA Excel? Примеры скрытия и отображения строк и столбцов.

Range.Hidden — это свойство, которое задает или возвращает логическое значение, указывающее на то, скрыты строки (столбцы) или нет.

Синтаксис

Expression — выражение (переменная), возвращающее объект Range.

  • True — диапазон строк или столбцов скрыт;
  • False — диапазон строк или столбцов не скрыт.

Примечание

Указанный диапазон (Expression) должен охватывать весь столбец или строку. Это условие распространяется и на группы столбцов и строк.

Свойство Range.Hidden предназначено для чтения и записи.

Примеры кода с Range.Hidden

Пример 1

Варианты скрытия и отображения третьей, пятой и седьмой строк с помощью свойства Range.Hidden:

Sub Primer1()

‘Скрытие 3 строки

Rows(3).Hidden = True

‘Скрытие 5 строки

Range(«D5»).EntireRow.Hidden = True

‘Скрытие 7 строки

Cells(7, 250).EntireRow.Hidden = True

    MsgBox «3, 5 и 7 строки скрыты»

‘Отображение 3 строки

Range(«L3»).EntireRow.Hidden = False

‘Скрытие 5 строки

Cells(5, 250).EntireRow.Hidden = False

‘Скрытие 7 строки

Rows(7).Hidden = False

    MsgBox «3, 5 и 7 строки отображены»

End Sub

Пример 2

Варианты скрытия и отображения третьего, пятого и седьмого столбцов из кода VBA Excel:

Sub Primer2()

‘Скрытие 3 столбца

Columns(3).Hidden = True

‘Скрытие 5 столбца

Range(«E2»).EntireColumn.Hidden = True

‘Скрытие 7 столбца

Cells(25, 7).EntireColumn.Hidden = True

    MsgBox «3, 5 и 7 столбцы скрыты»

‘Отображение 3 столбца

Range(«C10»).EntireColumn.Hidden = False

‘Отображение 5 столбца

Cells(125, 5).EntireColumn.Hidden = False

‘Отображение 7 столбца

Columns(«G»).Hidden = False

    MsgBox «3, 5 и 7 столбцы отображены»

End Sub

Пример 3

Варианты скрытия и отображения сразу нескольких строк с помощью свойства Range.Hidden:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Sub Primer3()

‘Скрытие одновременно 2, 3 и 4 строк

Rows(«2:4»).Hidden = True

    MsgBox «2, 3 и 4 строки скрыты»

‘Скрытие одновременно 6, 7 и 8 строк

Range(«C6:D8»).EntireRow.Hidden = True

    MsgBox «6, 7 и 8 строки скрыты»

‘Отображение 2, 3 и 4 строк

Range(«D2:F4»).EntireRow.Hidden = False

    MsgBox «2, 3 и 4 строки отображены»

‘Отображение 6, 7 и 8 строк

Rows(«6:8»).Hidden = False

    MsgBox «6, 7 и 8 строки отображены»

End Sub

Пример 4

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Sub Primer4()

‘Скрытие одновременно 2, 3 и 4 столбцов

Columns(«B:D»).Hidden = True

    MsgBox «2, 3 и 4 столбцы скрыты»

‘Скрытие одновременно 6, 7 и 8 столбцов

Range(«F3:H40»).EntireColumn.Hidden = True

    MsgBox «6, 7 и 8 столбцы скрыты»

‘Отображение 2, 3 и 4 столбцов

Range(«B6:D6»).EntireColumn.Hidden = False

    MsgBox «2, 3 и 4 столбцы отображены»

‘Отображение 6, 7 и 8 столбцов

Columns(«F:H»).Hidden = False

    MsgBox «6, 7 и 8 столбцы отображены»

End Sub


  1. Что делает макрос
  2. Код макроса
  3. Как работает макрос
  4. Как использовать
  5. Скачать файл

Ссылка на это место страницы:
#zadacha

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

Ссылка на это место страницы:
#formula

  1. Sub OtobrazitSkritieStrokiStolbci()
  2. Columns.EntireColumn.Hidden = False
  3. Rows.EntireRow.Hidden = False
  4. End Sub

Ссылка на это место страницы:
#kak

В этом макросе, мы используем коллекции Columns и коллекции Rows рабочего листа. Каждая коллекция имеет свойства, которые диктуют, являются их объекты скрытыми или видными. Этот макрос позволяет отобразить каждый столбец в коллекции Columns и каждую строку в коллекции Rows

Ссылка на это место страницы:
#touse

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

1. Активируйте редактор Visual Basic, нажав ALT + F11
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта. 
3. Выберите Insert➜Module
4. Введите или вставьте код во вновь созданном модуле. 

Ссылка на это место страницы:
#file

Файлы статей доступны только зарегистрированным пользователям.

1. Введите свою почту

2. Нажмите Зарегистрироваться

3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.

Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel. 

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

Подписывайтесь на нас в соц.сетях:

Чего хотел то?

Хотел написать довольно узкую статью про то, как автоматизировать скрытие ненужных и открытие, вдруг ставших нужными, строк/столбцов на листе Excel. Однако статья получилась несколько шире. Excel особенно хорошо демонстрирует свою силу, когда вы соединяете вместе несколько стандартных инструментов. Вот и я, придумывая пример, не удержался от этого «синтеза» и невольно пришлось выйти за ранее намеченные рамки статьи. Впрочем, я даже рад этому, так как вы только тогда расправите крылья в Excel, когда научитесь комбинировать свои отдельные навыки, как это показано в этой статье.

Синтез

Каждый приём, примененный в этом учебном примере, — банальщина, а сведенные воедино — уже некая магия. Какие же приёмы мы объединили:

  • Формулы

  • Форматы данных

  • Условное форматирование

  • Макрос

  • Элементы управления

Суть учебного примера

Будем формировать вот такой прямоугольник из звёздочек в рамке. Высотой и шириной которого, можно управлять при помощи двух счётчиков слева.

Скачать пример

Разбор решения по шагам:

  1. Смотрим лист Шаг 1. Рисуем жирную рамку вокруг диапазона D2:AY23. Зона для построения прямоугольника — E3:AX22.

  2. В ячейке A1 будем хранить ширину прямоугольника, который нам надо будет нарисовать звёздочками. В ячейке A2 — высоту.

  3. На пересечении строки 25 и столбца BA намечаем единичками наш будущий пояс видимости. Что это такое, расскажу позже.

  4. Создаём 2 именованных диапазона для A1 и A2 с названиями Ширина и Высота соответственно.

  5. В ячейку E3 вводим формулу
    =ЕСЛИ(И(СТОЛБЕЦ()<=Ширина;СТРОКА()<=Высота);1;0) или
    =IF(AND(COLUMN()<=Ширина;ROW()<=Высота);1;0),
    распространяем на весь диапазон E3:AX22.

  6. Смотрим лист Шаг 2. Меняем формат данных диапазона E3:AX22 на «;;;«. Так же поступаем с A1:A2. Этот пустой формат данных очень удобен тогда, когда наши ячейки содержат служебную вспомогательную информацию и мы не хотим визуализации на листе их значений.

  7. Через ленту РАЗРАБОТЧИК при включенном Режиме конструктора, через кнопку Вставить, добавляем 2 элемента управления типа Счётчик. Изменяем их как показано на экранах. Данные счётчики будут использованы для изменения значения диапазонов Ширина и Высота.

  8. Теперь разберемся с поясом видимости. Этот пояс будет обрабатываться макросом, который в чётком соответствии с ним будет скрывать или показывать соответствующие строки или столбцы. Например, если в F25 будет 1, то столбец F будет видимым, а если 0, то макрос скроет этот столбец. Соответственно, если BA5 будет содержать 1, то строка 5 будет видима, а если 0, то будет скрыта. Ячейка BA25 будет отвечать за видимость и строки 25, и столбца BA одновременно.
    В ячейки, чьи столбцы/строки, всегда должны быть видимыми (например A25:D25, которые отвечают за столбцы A:D) можно ввести просто единички. А вот в ячейки, которые должны управлять видимостью в динамике, мы введём формулы. E25, например, будет содержать =ЕСЛИ(ИЛИ(СУММ(E3:E22)>0;Видимость);1;0) или =IF(OR(SUM(E3:E22)>0;Видимость);1;0). Для нашего удобства я ввёл ещё один именованный диапазон Видимость, который располагается на листе Настройки и позволяет для наших нужд сделать все строки/столбцы видимыми, что может потребоваться вам для внесения изменений на листе (в противном случае вам пришлось бы делать видимыми столбцы и строки вручную, что довольно неудобно). Если Видимость истинна, то все наши сигнальные ячейки пояса верности видимости становятся равными всегда 1, вне зависимости от значений ячеек диапазона E3:AX22. В этом виновата формула ИЛИ (OR), которая возвращает ИСТИНА, если хотя бы 1 из её авгументов принял значение ИСТИНА.

  9. Займёмся рисованием звёздочек на месте единичек в диапазоне E3:AX22. Создадим правило условного форматирования, как показано на экранах.

  10. Ну и сделаем простой макрос, который будет сканировать пояс видимости и если текущая видимость столбца/строки не соответствует поясу, то он приводит это в соответствие, то есть либо скрывает, либо показывает строку/столбец.

  11. Макрос, оформленный в виде процедуры ShowHide, будем вызывать из событий изменения счётчиков

    а также события активации листа

Сводим всё воедино

Итак, на итоговом листе Шаг 3 все компоненты собраны воедино. Элементы управления счётчики настроены на изменение именованных диапазонов Ширина и Высота, которые через формулы влияют на появление единичек в диапазоне E3:AX22. На эти единички реагирует условное форматирование, рисуя на их месте звёздочки, и на них же реагируют ячейки пояса видимости, принимая значения 1 для тех столбцов/строк, которые должны быть видимыми, и 0 — для тех, что должны быть скрыты. Макрос, который скрывает/показывает строки и столбцы вызывается из события изменения счётчика и события активации листа.

Вывод

Я надеюсь, что не смотря на искусcтвенность примера, вы усвоили несколько важных приёмов, которые помогут вашим таблицам выглядеть более эффектно.

Читайте также:

  • Работа с объектом Range

  • Поиск границ текущей области

  • Массивы в VBA

  • Структуры данных и их эффективность

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

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

Видео: как скрыть или отобразить строки и столбцы в excel

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

Вот так выглядят простые примеры, с помощью которых Вы без труда сможете скрывать или отображать строки и столбцы с помощью VBA

Пример 1: Скрыть строку 2 в Excel
Пример 2: Скрыть несколько строк в Excel (строку 3-5)

Видео: Как скрыть и отобразить строки столбцы в microsoft Exel

Пример 3: Скрыть столбец 2 в Excel
Пример 4: Скрытие нескольких столбцов в Excel
Пример 5: Скрытие строки по имени ячейки в Excel
Пример 6: Скрытие нескольких строк по адресам ячеек

Видео: Как скрыть столбец или строку. Microsoft Excel для чайников

Пример 7: Скрытие столбца по имени ячейки
Пример 8: Скрытие нескольких столбцов по адресам ячеек Как видите процесс автоматического скрытия строк и столбцов очень прост, а применений данному приему огромное множество.

Для того, чтобы отобразить строки и столбцы в Excel вы можете воспользоваться этими же макросами, но вместе True необходимо указать False

Например, макрос для того, чтобы отобразить строку 2 будет выглядеть следующим образом:

Sub ViewString ()
Rows (2).Hidden = False

Надеемся, что данная статья была полезна вам и ответила на вопрос: как скрыть или отобразить строки и столбцы в Excel с помощью VBA

Видео: Разбивка строки текста на символы в Excel: программирование на VBA

показать скрытые строки

graffserg

Дата: Вторник, 16.01.2018, 18:33 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 84


Репутация:

1

±

Замечаний:
0% ±


2010

Уважаемые форумчане!!
Помогите с решением вопроса.
Имеется книга, на ней множество листов с информацией (фрукты, крупы и т.д.). Часть данных на листы вносятся с помощью «Выпадающего списока с добавлением новых элементов», которые находятся на листе «данные». Лист «итоги» служит для обобщения данных по годам и наименованию.
Необходима Ваша помощь, в написании макроса для листа «итоги», который в свою очередь реагировал бы на пустые строки и соответсвенно скрывал их (в моем случае строки A6:A19 и B24:B37). Если, к примеру, добавляются новые сведения по продукции, то они автоматически добавляются в «итоги» и заполненная строка отображается.
Спасибо.

К сообщению приложен файл:

8070653.xlsm
(26.7 Kb)

 

Ответить

Mikael

Дата: Вторник, 16.01.2018, 19:13 |
Сообщение № 2

Группа: Пользователи

Ранг: Участник

Сообщений: 80


Репутация:

31

±

Замечаний:
0% ±


Excel 2010

Добрый день!
Вот такой вариант:
При любом изменении ячеек на листе «данные», проверяем на нули 1 столбец листа «итоги», если 0 — скрыть строку, в противном случае показать.
Добавьте обработчик в модуль листа «данные».
[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rCell As Range
    With Sheets(«итоги»)
        For Each rCell In .Cells(.UsedRange.Row, 1).Resize(.UsedRange.Rows.Count)
            If Not IsEmpty(rCell) Then rCell.EntireRow.Hidden = IIf(rCell.Value = 0, True, False)
        Next rCell
    End With
End Sub

[/vba]

Сообщение отредактировал MikaelВторник, 16.01.2018, 19:18

 

Ответить

graffserg

Дата: Среда, 17.01.2018, 10:06 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 84


Репутация:

1

±

Замечаний:
0% ±


2010

Спасибо 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

Дата: Среда, 17.01.2018, 11:56 |
Сообщение № 4

Группа: Пользователи

Ранг: Участник

Сообщений: 80


Репутация:

31

±

Замечаний:
0% ±


Excel 2010

1. реагировал на изменения и скрывал строки только в определенном диапазоне(ах), например A10:A40, A45:A60, A70:A90 и т.д.?

Можно.
[vba]

Код

For Each rCell In .Range(«A10:A40, A45:A60, A70:A90»)

[/vba]
Но сразу возникает вопрос: на всех листах «итоги_n» диапазоны одинаковые?

2. работал на нескольких листах, например «итоги» и «итоги_2»?

[vba]

Код

For Each Sh In Array(«итоги», «итоги_2», … , «итоги_n»)

[/vba]

все вместе будет выглядеть так (диапазоны из Вашего файла в 1 посте):
[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rCell As Range, Sh As Variant
    For Each Sh In Array(«итоги», «итоги_2»)
        For Each rCell In Sheets(Sh).Range(«A6:A19, A24:A37»)
            If Not IsEmpty(rCell) Then rCell.EntireRow.Hidden = IIf(rCell.Value = 0, True, False)
        Next rCell
    Next Sh
End Sub

[/vba]
С файлом, который ближе к реальности, было бы проще Вам помочь.

 

Ответить

fan-vba

Дата: Среда, 17.01.2018, 12:32 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

10

±

Замечаний:
0% ±


Excel 2007

С файлом, который ближе к реальности, было бы проще Вам помочь.

это верно!

Посмотрите, может это Вам чем то поможет

[vba]

Код

Public vid As Boolean ‘значение true или false (дополнительно передаем переменную на кнопку)
Sub скрытие_отображение()
    Dim irows As Range
    Dim inabor As Range

        name_ch = «итоги» ‘здесь мы будем присваивать имя листа
    On Error Resume Next ‘защита от ошибки, если условие не выполнится ни разу

        Worksheets(name_ch).Unprotect Password:=»123456″

        For i = 5 To 100 ‘пребор строк с 5 по 100
     If Worksheets(name_ch).Cells(i, 1) > 5 Then ‘любое условие для скрытия/отображения из 1 столбца
      Set irows = Worksheets(name_ch).Rows(i & «:» & i) ‘запоминаем строку, если сработало условие
       If inabor Is Nothing Then ‘условие для задания первой строки и последующего добавления новых строк
       Set inabor = irows ‘задаем первую строку в пустой набор
       Else
       Set inabor = Union(inabor, irows) ‘добавляем строки по условию к существующему набору
       End If
     End If
    Next i

           inabor.EntireRow.Hidden = vid ‘скрываем/отображаем наш набор строк

        Worksheets(name_ch).Protect Password:=»123456″
End Sub

[/vba]

и для кнопки на листе

[vba]

Код

Private Sub CommandButton1_Click()
Worksheets(«итоги»).Unprotect Password:=»123456″
If vid = False Then
vid = True
Else
vid = False
End If
скрытие_отображение
End Sub

[/vba]

 

Ответить

graffserg

Дата: Среда, 17.01.2018, 12:35 |
Сообщение № 6

Группа: Пользователи

Ранг: Участник

Сообщений: 84


Репутация:

1

±

Замечаний:
0% ±


2010

Но сразу возникает вопрос: на всех листах «итоги_n» диапазоны одинаковые?

Диапазон на всех листах разный.
Спасибо счас буду пробовать

 

Ответить

graffserg

Дата: Среда, 17.01.2018, 13:15 |
Сообщение № 7

Группа: Пользователи

Ранг: Участник

Сообщений: 84


Репутация:

1

±

Замечаний:
0% ±


2010

уважаемый Mikael, попробовал!
Увы, с учетом того, что диапазон на листах разный макрос работать отказывается, а вот если оставить только один лист — макрос работает замечательно.
И еще вопрос — как быть, если лист защищен паролем?
Вам fan-vba тоже огромное спасибо! Буду пробовать.

 

Ответить

Mikael

Дата: Среда, 17.01.2018, 13:55 |
Сообщение № 8

Группа: Пользователи

Ранг: Участник

Сообщений: 80


Репутация:

31

±

Замечаний:
0% ±


Excel 2010

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

Поэтому я и задал этот вопрос. Тут есть пара вариантов решения.
Если Вы знаете диапазоны для каждого листа, можно перебрать их через select case перед вложенным циклом, примерно так:
[vba]

Код

Select Case Sh
    Case «итоги»
        strRange = «A6:A19»
    Case «итоги_2»
        strRange = «A24:A37»
End Select

[/vba]

Но лично я бы предпочел добавить исключение Вашего условия и вернутся к неопределенному диапазону из 2 поста.
Нужно знать условие по которому скрываются эти ячейки.
Скрываются строки с ячейками больше 5?

If Worksheets(name_ch).Cells(i, 1) > 5 Then ‘любое условие для скрытия/отображения из 1 столбца

 

Ответить

graffserg

Дата: Среда, 17.01.2018, 14:08 |
Сообщение № 9

Группа: Пользователи

Ранг: Участник

Сообщений: 84


Репутация:

1

±

Замечаний:
0% ±


2010

Отлично, работает по первой части из поста. Диапазон скрытия до 200 строк. Только как быть, если лист под паролем? Пробовал, но не получается. Помогите пожалуйста.

 

Ответить

Mikael

Дата: Среда, 17.01.2018, 14:14 |
Сообщение № 10

Группа: Пользователи

Ранг: Участник

Сообщений: 80


Репутация:

31

±

Замечаний:
0% ±


Excel 2010

И еще вопрос — как быть, если лист защищен паролем?

Защита листа это уже отдельный вопрос. Совсем недавно была тема
Можно добавить параметр UserInterfaceOnly:=True, тогда лист будет защищен, но макросы сработают. И не надо будет в каждой процедуре прописывать «снять защиту» «поставить защиту».
[vba]

Код

Worksheets(Sh).Protect Password:=»123456″, UserInterfaceOnly:=True

[/vba]
Однако этот параметр слетает при закрытии книги, поэтому код нужно вставить в модуль книги в обработчик события Workbook_Open.
[vba]

Код

Private Sub Workbook_Open()
    Dim Sh As Variant
    For Each Sh In Array(«итоги», «итоги_2»)
        Worksheets(Sh).Protect Password:=»123456″, UserInterfaceOnly:=True
    Next Sh
End Sub

[/vba]

 

Ответить

graffserg

Дата: Среда, 17.01.2018, 15:00 |
Сообщение № 11

Группа: Пользователи

Ранг: Участник

Сообщений: 84


Репутация:

1

±

Замечаний:
0% ±


2010

Уважаемые Mikael, а возможно ли в самом макросе, предложенном Вами, вписать типа
[vba]

Код

ActiveSheet.Protect Password:=»1111″, UserInterfaceOnly:=True

[/vba]
Дело в том, что у меня в книге, порядка 20 листов, часть их запаролена, а часть нет. Пробовал как Вы написали выше, но сразу строка
[vba]

Код

Worksheets(Sh).Protect Password:=»123456″, UserInterfaceOnly:=True

[/vba]
выделяется красным. Может я не то делаю :'(

 

Ответить

Mikael

Дата: Среда, 17.01.2018, 15:18 |
Сообщение № 12

Группа: Пользователи

Ранг: Участник

Сообщений: 80


Репутация:

31

±

Замечаний:
0% ±


Excel 2010

graffserg, странно у меня все работает. Вероятно ошибку вызывает неправильное название одного из листов в Array, возможно ругается на то, что защита уже установлена. Файла нет, точно сказать не могу.
Попробуйте вот что:
1. перед защитой листа снять ее
[vba]

Код

Worksheets(Sh).Unprotect Password:=»123456″

[/vba]
2. если не поможет, запустите этот код:
[vba]

Код

Sub TestShNames()
    On Error Resume Next
    Dim Sh As Variant
    For Each Sh In Array(«итоги», «итоги_2»)
        Worksheets(Sh).Unprotect Password:=»123456″
        Worksheets(Sh).Protect Password:=»123456″, UserInterfaceOnly:=True
        If Err Then MsgBox Sh, vbCritical: Err.Clear
    Next Sh
    On Error GoTo 0
End Sub

[/vba]
Он должен выдать сообщение, если неправильное имя листа

 

Ответить

RAN

Дата: Среда, 17.01.2018, 15:27 |
Сообщение № 13

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

graffserg, странно у меня все работает

Ничего странного
Правильно записанная строка работает, не правильно записанная — со стыда краснеет. :D


Быть или не быть, вот в чем загвоздка!

 

Ответить

graffserg

Дата: Среда, 17.01.2018, 15:36 |
Сообщение № 14

Группа: Пользователи

Ранг: Участник

Сообщений: 84


Репутация:

1

±

Замечаний:
0% ±


2010

Спасибо огромное. Всё работает как часы. Мной была допущена ошибка в коде.

 

Ответить

Mikael

Дата: Среда, 17.01.2018, 15:43 |
Сообщение № 15

Группа: Пользователи

Ранг: Участник

Сообщений: 80


Репутация:

31

±

Замечаний:
0% ±


Excel 2010

graffserg, отлично, рад помочь :)
RAN, вот что значит большой опыт, а я сразу понесся варианты строить :D

 

Ответить

Manyasha

Дата: Среда, 17.01.2018, 15:51 |
Сообщение № 16

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

graffserg, для корректного оформления кода, в режиме правки поста выделите весь код и нажмите на кнопку #.


ЯД: 410013299366744 WM: R193491431804

 

Ответить

graffserg

Дата: Среда, 17.01.2018, 17:31 |
Сообщение № 17

Группа: Пользователи

Ранг: Участник

Сообщений: 84


Репутация:

1

±

Замечаний:
0% ±


2010

Всем огромное спасибо!!! Вот, что значит мастера!! hands hands

 

Ответить

Данные исходные коды VBA-макросов умеют быстро находить все скрытые строки и столбцы на листе Excel. Также они выводят всю информацию о скрытых строках и столбцах. Номера строк отображаются числами, а номера столбцов преобразуются в буквы заголовков, что очень удобно.

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

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

таблица с данными по заказам.

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

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

Visual Basic.

В редакторе вставьте новый модуль выбрав инструмент «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

Insert-Module.

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

получить информацию о скрытых строках.

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



Описание исходного VBA-кода для поиска скрытых строк

В начале данного кода объявляются сразу 3 переменные:

  1. i – счетчик циклов.
  2. text – содержит текст для текущего сообщения информации о скрытых строках.
  3. pervoj – номер первой скрытой строки в группе скрытых строк.

В начале тела кода макроса для переменной text присваиваем начало текста сообщения. После выполняется цикл, в котором проверяться по очереди все строки в пределах используемого диапазона листа. И определяется какие из них скрытые. Если текущая строка является скрытой, значит запускается проверка значения переменной pervoj. Если в переменную еще не было присвоено ни одно значение, тогда для нее присваивается номер первой скрытой строки в отдельной группе скрытых строк. Дальше проверяется и выполняется следующее условие. Если проверяемая строка не является скрытой и переменная pervoj уже содержит в своем значении номер первой скрытой сроки, тогда выполняется целый ряд следующих операций:

  1. К тексту в переменной text дописывается (с новой строки) номер первой скрытой строки из текущей группы скрытых строк.
  2. К тексту в переменной text дописывается двоеточие и номер последней строки из текущей группы строк. Данное значение взято из счетчика цикла текущее числовое значение в переменной i-1.
  3. Удаляется значение из переменной pervoj. Таким образом создается возможность для запуска этих же операций для следующей группы скрытых строк.

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

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

В самом конце макроса вызывается сообщение в теле которого должно содержаться текстовое значение из переменной text.

Если исходная таблица не содержит ни одной скрытой строки, тогда после запуска макроса будет отображаться только первая строка текста из переменной text: «В данном листе скрыты следующие строки:»

ни одной скрытой строки.

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

Dim HidViz As Boolean

В ней будет содержаться одно из двух традиционных логических значений True or Fasle (истина или ложь), в зависимости от того будет ли таблица содержать хотя-бы одну скрытую строку или нет. Далее после строки кода макроса:

If ActiveSheet.Rows(i).Hidden = True Then

дописываем инструкцию изменяющую логическое значение для переменной HidViz:

HidViz = True

Дополнительно в конце кода перед строкой:

MsgBox text

добавьте инструкции для изменения текста сообщения на альтернативный, в тому случаи если не найдено ни одной скрытой строки в исходной таблице:

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-макрос

Но что если необходимо сделать так чтобы макрос показывал информацию не о скрытых строках, а и о скрытых столбцах таблицы:

о скрытых столбцах.

В таком случае сделаем так:

  1. Скопируйте выше описанный код макроса для отображения информации о скрытых строках в этот же модуль и переименуйте его на «HiddenColumnInfo».
  2. Измените тексты сообщений, а именно измените по смыслу слова «строки» на «столбцы».
  3. В коде измените все свойства где встречается Rows на Columns.
  4. Измените строку для отображения текста сообщения с информацией о скрытых столбцах. Ведь заголовки столбцов у нас отображаются буквами, а не числами. Для этого воспользуемся строкой кода, которая умеет возвращать букву столбца VBA. Поэтому вместо строки:

    pervoj = i

    пишем:

    pervoj = Split(Cells(1, i).Address, «$»)(1)

    a вместо строки для вывода сообщения:

    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:

Sub HiddenLineColumnInfo()
HiddenLinesInfo
HiddenColumnInfo
End Sub

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

Понравилась статья? Поделить с друзьями:
  • Макросы excel с чего начать
  • Макросы excel нажатие на кнопку
  • Макросы excel размер шрифта
  • Макросы excel количество строк
  • Макросы excel кнопка печать