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

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. Введите или вставьте код.

Как скрыть или отобразить строки и столбцы с помощью свойства 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


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

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

  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. 

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

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

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

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 показать все скрытые листы
  • Vba excel поиск ячейки по содержимому
  • Vba excel поиск ячейки в строке
  • Vba excel поиск ячейки в столбце по значению
  • Vba excel поиск файла по маске