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


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

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

Burk, Hugo121, Добрый день.

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

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

Нашла в интернете макрос, что скрывал бы отмеченные столбцы :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Hide()
    Dim cell As Range
    Application.ScreenUpdating = False
    For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
        If cell.Value = "Январь" Then cell.EntireColumn.Hidden = True
        If cell.Value = "Февраль" Then cell.EntireColumn.Hidden = True
    Next
    Application.ScreenUpdating = True
End Sub
 
Sub Show()
    Columns.Hidden = False
    Rows.Hidden = False
End Sub

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

 

Serge

Пользователь

Сообщений: 11308
Регистрация: 01.01.1970

Есть файл, в котором надо нажатием кнопки скрыть/отобразить строки, которые пусты визуально (на самом деле в них формулы). Дополнительную сложность представляют столбцы залитые зелёным (в них есть значения, но строки надо скрывать невзирая на них).  

  Спасибо.  

  9,72 Кб в архиве.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

А просто автофильтром?

Я сам — дурнее всякого примера! …

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#3

16.08.2010 21:23:05

может как нибудь так?  
If Value(Cells(i, 2)) > 0 Then Rows(«i:i»).RowHeight = 0  

  или наверное <> «» по первому столбцу  
то был я

Спасибо

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Если именно ВБА, то:  
Public Sub RowHide()  
Dim i As Integer  
For i = 4 To 20  
If Cells(i, 1).Value = «» Then Rows(i).RowHeight = 0  
Next  
End Sub  

  Public Sub RowsShow()  
   Rows(«4:20»).RowHeight = 15  
End Sub

Я сам — дурнее всякого примера! …

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#5

16.08.2010 21:31:48

только через  
Range

Спасибо

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Или, если строго следовать заданию:  
Public Sub RowHide()  
Dim i As Integer  
For i = 4 To 20  
If Cells(i, 1).Value = «» Then Rows(i).Hidden = True  
Next  
End Sub  

  Public Sub RowsShow()  
   Rows(«4:20»).Hidden = False  
End Sub

Я сам — дурнее всякого примера! …

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#7

16.08.2010 21:40:38

ну да это меня клинит

Спасибо

 

Serge

Пользователь

Сообщений: 11308
Регистрация: 01.01.1970

Всем спасибо, но это конечно не решение…  
Серёг, Rows(«4:20»).Hidden = False я и сам макрорекордером могу записать :-)  
Количество строк для отображения/скрытия заранее неизвестно, оно получается в результате работы формул, содержащихся в этих строках.  

  Кстати круче было бы не по кнопке скрывать строки, а по заполнению строк, реал тайм.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Так?  
Public Sub RowHide()  
Dim i As Integer, lr As Long  
[A2].CurrentRegion.Select
lr = [A2].CurrentRegion.Rows.Count
For i = 4 To lr  
If Cells(i, 1).Value = «» Then Rows(i).Hidden = True  
Next  
End Sub  
<<<Кстати круче было бы не по кнопке скрывать строки, а по заполнению строк, реал тайм. >>> Это как? Заполнять скрытые строки, после чего они должны отобразиться?

Я сам — дурнее всякого примера! …

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Соответсвенно:  
Public Sub RowsShow()  
Dim lr As Long  
lr = [A2].CurrentRegion.Rows.Count
   Rows(«4:» & lr).Hidden = False  
End Sub  
В прошлом посте строка с селектом лишняя. Забыл удалить.

Я сам — дурнее всякого примера! …

 

или так  
Public Sub RowHide()  
Dim i As Integer  
Dim lLastRow As Long  
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
For i = 4 To lLastRow  
If Cells(i, 1).Value = «» Then Rows(i).Hidden = True  
Next  
End Sub

 

Serge

Пользователь

Сообщений: 11308
Регистрация: 01.01.1970

{quote}{login=KuklP}{date=16.08.2010 10:36}{thema=}{post}Так?  
Public Sub RowHide()  
…………………………{/post}{/quote}По коду: Да, так, спасибо.  
По «хотелке»: Типа. Если в результате работы формулы в скрытой строке появилось значение — она отображается. И наооборот.  

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

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#13

16.08.2010 22:46:44

lr = [A2].CurrentRegion.Rows.Count

  Сергей прокомментируй пж CurrentRegion

Спасибо

 

Serge

Пользователь

Сообщений: 11308
Регистрация: 01.01.1970

Ну, для меня разницы никакой.  
Так же правильно и так же медленно…

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#15

16.08.2010 22:55:04

это было ему KuklP  
просто я не знаю что это

Спасибо

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Такая фенька не всегда срабатывает при последних скрытых строках. Я сознательно пошел другим путем.  
Вообще правильней будет:  
lr = [A2].CurrentRegion.Rows.Count + [A2].CurrentRegion.Row — 1
Но в этом конкретном случае такое не важно.  
Если есть желание гляньте тему:

http://www.planetaexcel.ru/forum.php?thread_id=18295    

Там о том же есть.

Я сам — дурнее всякого примера! …

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Public Sub RowHide()  
Dim i As Integer, lr As Long  
Application.ScreenUpdating = False  
lr = [A2].CurrentRegion.Rows.Count + [A2].CurrentRegion.Row — 1
For i = 4 To lr  
If Cells(i, 1).Value = «» Then Rows(i).Hidden = True  
Next  
Application.ScreenUpdating = True  
End Sub  
Так быстрей.  
CurrentRegion — это текущий диапазон, отделенный от других пустыми строками и столбцами.

Я сам — дурнее всякого примера! …

 

Serge

Пользователь

Сообщений: 11308
Регистрация: 01.01.1970

{quote}{login=KuklP}{date=16.08.2010 10:59}{thema=}{post}Так быстрей.{/post}{/quote}Ага! То что надо. Спасибо Серёг!  
ЗЫ Задача решена. Как насчёт онлайн изменений?

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Вот так будет работать только если в столбец Н данные будут вводиться вручную.  
При формульных изменениях событие Worksheet_Change не возникает.  
Private Sub Worksheet_Change(ByVal Target As Range)  
   If Target.Column <> 8 Then Exit Sub  
   If Target.Value <> 0 Then  
       Target.EntireRow.Hidden = False  
   Else  
       Target.EntireRow.Hidden = True  
   End If  
End Sub

Я сам — дурнее всякого примера! …

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Но опять же, как ты внесешь данные в скрытую строку? Ерунда…  
Мож чего позже в голову прийдет.  

  99550

Я сам — дурнее всякого примера! …

 

Serge

Пользователь

Сообщений: 11308
Регистрация: 01.01.1970

{quote}{login=KuklP}{date=16.08.2010 11:15}{thema=}{post}Но опять же, как ты внесешь данные в скрытую строку? Ерунда…{/post}{/quote}Я ничего в скрытую строку вносить не собираюсь :-)  
Там есть формулы, которые могут возвращать 0, а могут и не ноль. Так вот если не ноль, то строка должна отобразится, если 0, то остаётся скрытой.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Вот так можно, но… Пробуй.  
В модуль листа:  
Private Sub Worksheet_Calculate()  
RowHide  
End Sub  
В общий модуль:  
Public Sub RowHide()  
Dim i As Integer, lr As Long  
Application.ScreenUpdating = False  
Application.EnableEvents = False  
lr = [A2].CurrentRegion.Rows.Count + [A2].CurrentRegion.Row — 1
For i = 4 To lr  
If Cells(i, 9).Value = 0 Then  
Rows(i).Hidden = True  
Else  
Rows(i).Hidden = False  
End If  
Next  
Application.EnableEvents = True  
Application.ScreenUpdating = True  
End Sub  
Но будет дрыгаться на каждый чих.  

  97337

Я сам — дурнее всякого примера! …

 

Serge

Пользователь

Сообщений: 11308
Регистрация: 01.01.1970

А без Worksheet_Calculate() нельзя обойтись?  
Чтоб только при изменениях, а не при каждом пересчёте?

 

yura68

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

Добрый день. Как  при помощи VBA  подкорректировать ,  
что-бы можно было скрыть-отобразить незаполненные ячейкив строках  
По одной  расходной накладной можно отпустить  
несколько товара и ячейки A10,B12  нет необходимости заполнять  

  Т.Е невсегда  ячейки А10,  B12   могут быть заполнены  

  я в ячейках A10:A13  прописал знак =»» — работает  
После  каждого открытия книги нужно прописывать знак =»» -это неудобно  
Спасибо.  
Юра

 

k61

Пользователь

Сообщений: 2441
Регистрация: 21.12.2012

 

yura68

Пользователь

Сообщений: 17
Регистрация: 01.01.1970

Спасибо.Вариант отличный. А если все строки заполнены,то выдает ошибку, так как нет пустых строк. А как устранить эту ошибку?  
Спасибо.

 

k61

Пользователь

Сообщений: 2441
Регистрация: 21.12.2012

 

Diman1780

Пользователь

Сообщений: 3
Регистрация: 01.01.1970

Есть файл, в  котором есть 2 кнопки : «Скрыть» и «Отобразить».    
Условия выбираются фильтром, а затем кнопки скрывают пустые ячейки, если таковые есть в диапазоне, либо отображают все ячейки  

  Писал макрос не я, потому ничего сказать о его содержимом не могу. Всё прекрасно работало. Добавлял строки и столбцы в таблицу….но в какой то момент просто перестал работать. Хотя в содержимое макроса не лазил нигде, кроме прописывания диапазона в котором и должно проверяться наличие/отсутствие содержимого ячеек.  

  В данный момент скрываются абсолютно все солбцы(не важно пустые или нет), а строки наоборот: скрываются только на части диапазона.  
Прошу помощи!!! Заранее благодарен, если здесьобитающие ГУРУ просветят меня в моей безграмотности!  
<EM><STRONG>Файл удален</STRONG> — велик размер — [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>

 

IGGI

Пользователь

Сообщений: 15
Регистрация: 01.01.1970

{quote}{login=Serge 007}{date=17.08.2010 12:03}{thema=}{post}А без Worksheet_Calculate() нельзя обойтись?  
Чтоб только при изменениях, а не при каждом пересчёте?{/post}{/quote}  

  Скажите пожалуйста, удалось решить проблему с отображением только тех строк, в которых выводится визуальная информация, с учетом вышеозвученного Serge 007?

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#30

06.09.2012 19:13:34

Как понять — визуальная информация?

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

Понравилась статья? Поделить с друзьями:
  • Excel vba как проверить существование файла
  • Excel vba как проверить существование листа
  • Excel vba как проверить наличие листа в книге
  • Excel vba как прервать цикл for
  • Excel vba как поставить фильтр