Пустые строки в таблицах Excel занимают место как на экране монитора, так и на листе бумаги и при этом не несут смысловой нагрузки. Тем не менее некоторые ячейки этих строк могут участвовать в расчетах, что делает их удаление неприемлемым. В таких случаях пустые строки можно скрыть, причем сделать это можно очень быстро.
Как скрыть пустые строки средствами Excel?
Скрыть строки вручную
Простейший способ заключается в том, чтобы зрительно отыскать пустые строки и выделить их. При выделении нескольких строк нужно удерживать клавишу Ctrl на клавиатуре. После этого необходимо навести курсор на выделенное поле, кликнуть по нему правой кнопкой мыши и выбрать пункт «Скрыть» из контекстного меню. Выделенные строки будут скрыты. Способ простой, но имеет свои минусы, можно пропустить строку, можно ошибочно выделить не ту строку.
Скрыть строки используя сортировку
Если предстоит скрыть большое количество строк, искать их, что называется «глазами» очень не удобно. В этом случае можно использовать сортировку для того чтобы пустые строки сгруппировались и после этого скрыть их, выделив сразу весь диапазон либо просто вывести за пределы печати при распечатывании документа. Минусом этого метода является то, что очередность строк нарушается.
Программное скрытие макросом VBA
Теперь речь пойдет о том как программно скрыть пустые строки макросом. Возьмем процедуру, при помощи которой мы уже удаляли пустые строки и внесем в её программный код небольшие изменения. Заменим команду Rows(r).Delete на Rows(r).Hidden = True
Sub Skryt_Pustye_Stroki() Dim r As Long, FirstRow As Long, LastRow As Long FirstRow = ActiveSheet.UsedRange.Row LastRow = ActiveSheet.UsedRange.Rows.Count - 1 + ActiveSheet.UsedRange.Row For r = LastRow To FirstRow Step -1 If Application.CountA(Rows(r)) = 0 Then Rows(r).Hidden = True End If Next r End Sub
Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом , нажмите на одну из двух кнопкок в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).
Напомню, что область действия макроса — используемый диапазон, то есть все строки, находящиеся между первой и последней заполненными ячейками.
Автоматическое скрытие с использованием надстройки
Еще более гибкий инструмент для работы со строками — надстройка, сделанная на базе макроса VBA, позволяющая удалять и скрывать не только пустые строки, но и строки, подходящие под условия пользователей. Для удобства пользователей здесь добавлено диалоговое окно, при помощи которого можно изменять диапазоны действия макроса, выставлять условия и определять другие параметры.
Пользователь на свой выбор может как удалить так и скрыть пустые строки. Может удалить либо скрыть строки содержащие либо не содержащие заданный текст. При поиске заданного текста пользователь на свой выбор может учитывать либо не учитывать регистр. Возможен одновременный поиск сразу нескольких значений, введенных через точку с запятой (;). Кроме того пользователь также может ограничивать диапазон действия макроса, задавая номера первой и последней обрабатываемой строки. Надстройка освобождает пользователя от поиска нужного макроса в списке доступных макросов, так как позволяет вызывать диалоговое окно прямо из панели инструментов Excel.
Еще одна надстройка, для скрытия и удаления строк и столбцов, в зависимости от значений ячеек и заданных условий. Работает несколько медленнее, чем первая, так как проверяет не строки, а ячейки, но более гибко. Позволяет удалять не только строки и столбцы, но и ячейки с заданными значениями и с заданным сдвигом.
Другие материалы по теме:
Serge Пользователь Сообщений: 11308 |
Есть файл, в котором надо нажатием кнопки скрыть/отобразить строки, которые пусты визуально (на самом деле в них формулы). Дополнительную сложность представляют столбцы залитые зелёным (в них есть значения, но строки надо скрывать невзирая на них). Спасибо. 9,72 Кб в архиве. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
А просто автофильтром? Я сам — дурнее всякого примера! … |
R Dmitry Пользователь Сообщений: 3103 Excel,MSSQL,Oracle,Qlik |
#3 16.08.2010 21:23:05 может как нибудь так? или наверное <> «» по первому столбцу
|
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Если именно ВБА, то: Public Sub RowsShow() Я сам — дурнее всякого примера! … |
R Dmitry Пользователь Сообщений: 3103 Excel,MSSQL,Oracle,Qlik |
#5 16.08.2010 21:31:48 только через
|
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Или, если строго следовать заданию: Public Sub RowsShow() Я сам — дурнее всякого примера! … |
R Dmitry Пользователь Сообщений: 3103 Excel,MSSQL,Oracle,Qlik |
#7 16.08.2010 21:40:38 ну да это меня клинит
|
|
Serge Пользователь Сообщений: 11308 |
Всем спасибо, но это конечно не решение… Кстати круче было бы не по кнопке скрывать строки, а по заполнению строк, реал тайм. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Так? Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Соответсвенно: Я сам — дурнее всякого примера! … |
или так |
|
Serge Пользователь Сообщений: 11308 |
{quote}{login=KuklP}{date=16.08.2010 10:36}{thema=}{post}Так? ЗЫ Код медленно очень работает, можно к нему прогрессбар привинтить красивый? |
R Dmitry Пользователь Сообщений: 3103 Excel,MSSQL,Oracle,Qlik |
#13 16.08.2010 22:46:44 lr = [A2].CurrentRegion.Rows.Count Сергей прокомментируй пж CurrentRegion
|
|
Serge Пользователь Сообщений: 11308 |
Ну, для меня разницы никакой. |
R Dmitry Пользователь Сообщений: 3103 Excel,MSSQL,Oracle,Qlik |
#15 16.08.2010 22:55:04 это было ему KuklP
|
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Такая фенька не всегда срабатывает при последних скрытых строках. Я сознательно пошел другим путем. http://www.planetaexcel.ru/forum.php?thread_id=18295 Там о том же есть. Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Public Sub RowHide() Я сам — дурнее всякого примера! … |
Serge Пользователь Сообщений: 11308 |
{quote}{login=KuklP}{date=16.08.2010 10:59}{thema=}{post}Так быстрей.{/post}{/quote}Ага! То что надо. Спасибо Серёг! |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Вот так будет работать только если в столбец Н данные будут вводиться вручную. Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Но опять же, как ты внесешь данные в скрытую строку? Ерунда… 99550 Я сам — дурнее всякого примера! … |
Serge Пользователь Сообщений: 11308 |
{quote}{login=KuklP}{date=16.08.2010 11:15}{thema=}{post}Но опять же, как ты внесешь данные в скрытую строку? Ерунда…{/post}{/quote}Я ничего в скрытую строку вносить не собираюсь |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Вот так можно, но… Пробуй. 97337 Я сам — дурнее всякого примера! … |
Serge Пользователь Сообщений: 11308 |
А без Worksheet_Calculate() нельзя обойтись? |
yura68 Пользователь Сообщений: 17 |
Добрый день. Как при помощи VBA подкорректировать , Т.Е невсегда ячейки А10, B12 могут быть заполнены я в ячейках A10:A13 прописал знак =»» — работает |
k61 Пользователь Сообщений: 2441 |
|
yura68 Пользователь Сообщений: 17 |
Спасибо.Вариант отличный. А если все строки заполнены,то выдает ошибку, так как нет пустых строк. А как устранить эту ошибку? |
k61 Пользователь Сообщений: 2441 |
|
Diman1780 Пользователь Сообщений: 3 |
Есть файл, в котором есть 2 кнопки : «Скрыть» и «Отобразить». Писал макрос не я, потому ничего сказать о его содержимом не могу. Всё прекрасно работало. Добавлял строки и столбцы в таблицу….но в какой то момент просто перестал работать. Хотя в содержимое макроса не лазил нигде, кроме прописывания диапазона в котором и должно проверяться наличие/отсутствие содержимого ячеек. В данный момент скрываются абсолютно все солбцы(не важно пустые или нет), а строки наоборот: скрываются только на части диапазона. |
IGGI Пользователь Сообщений: 15 |
{quote}{login=Serge 007}{date=17.08.2010 12:03}{thema=}{post}А без Worksheet_Calculate() нельзя обойтись? Скажите пожалуйста, удалось решить проблему с отображением только тех строк, в которых выводится визуальная информация, с учетом вышеозвученного Serge 007? |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#30 06.09.2012 19:13:34 Как понять — визуальная информация? |
Исходные коды макросов для выделения, удаления, скрытия и добавления пустых строк в таблицу Excel по условию пользователя.
Как выделить все пустые строки макросом
Есть таблица годового бюджета, разделенная на отдельные группы статей расходов и кварталы. Каждая группа статей расходов разделена между собой пустыми строками:
Нам необходимо удалить все пустые строки в таблице. Для этого сначала необходимо их выделить. Если выделять вручную, то потребуется много времени и сил. Кроме того, нужно еще быть уверенным что строка действительно является пустой, чтобы вместе с ней не удалить важную информацию из бюджета или формулу. Для автоматического решения данной задачи лучше написать свой макрос, который сам проверит и выделит все пустые строки в таблице годового бюджета.
Откройте редактор Visual Basic (ALT+F11):
И воздайте в нем новый модуль для текущей книги «Insert»-«Module», а потом запишите в него следующий VBA-код макроса:
Sub SelectLine()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range("A1"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодной пустой строки!"
Else
diapaz2.Select
End If
End Sub
Теперь если нам нужно автоматически выделить все пустые строки в таблице бюджета перед тем как их удалить, выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«SelectLine»-«Выполнить». В результате выделяться все пустые ячейки только для пустых строк внутри исходной таблицы.
Пример работы первого VBA-кода:
Пустые строки, которые находиться под последними заполненными ячейками не будут выделены. Теперь для удаления выделенных строк пользователю осталось только выбрать инструмент: «ГЛАВНАЯ»-«Ячейки»-«Удалить»-«Удалить строки с листа». Или нажать комбинацию горячих клавиш CTRL+=. А после в появившемся окне «Удаление ячеек» выбрать опцию «строку» и нажать ОК.
Вначале кода присваиваем для переменной diapaz1 диапазон ячеек в границах между A1 и последней используемой ячейкой на рабочем листе Excel.
Примечание. Последняя используемая ячейка на листе — это любая ячейка для, которой были выполнены любые изменения: ввод значений, изменение формата границ или цвета фона и т.п.
Далее в цикле проверяются все строки в этом диапазоне, каждая по отдельности, на количество непустых ячеек. В том случаи если метод CountA возвращает значение 0, то адреса этих ячеек дополняют несмежный диапазон в переменной diapaz2 еще на одну пустую строку.
В конце макроса выделяются все пустые строки, находящиеся внутри диапазона определенным переменной diapaz2. Если же таблица не сдержит ни одной пустой строки, тогда выводиться соответственное сообщение.
Макрос для удаления пустых строк
Как удалить строку макросом? Если нужно сделать так чтобы макрос автоматически не только выделял, но и сам удалял пустые целые и смежные диапазоны ячеек без использования других инструментов, тогда в конце кода для переменной diapaz2.Select следует изменить метод на [Delete]:
diapaz2.[Delete]
Удалить:
Sub DelLine()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range("A1"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодной пустой строки!"
Else
diapaz2.[Delete]
End If
End Sub
Пример второго VBA-кода:
Макрос для скрытия пустых строк
Как скрыть пустые строки макросом? Но если вам нужно не удалить, а только скрыть (например, при подготовке документа на печать), тогда эту строку кода следует модифицировать несколько иначе:
diapaz2.EntireRow.Hidden = True
Скрыть:
Sub HidLine()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range("A1"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодной пустой строки!"
Else
diapaz2.EntireRow.Hidden = True
End If
End Sub
Пример третьего VBA-кода:
Добавление строк макросом
Как вставить строки макросом? Если мы изменим код в этом же месте как показано ниже, то получиться инструмент для добавления и вставки строк после пустых:
diapaz2.[Insert]
Добавить:
Sub AddLine()
Dim i As Long
Dim diapaz1 As Range
Dim diapaz2 As Range
Set diapaz1 = Application.Range(ActiveSheet.Range("A1"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
For i = 1 To diapaz1.Rows.Count
If WorksheetFunction.CountA(diapaz1.Rows(i).EntireRow) = 0 Then
If diapaz2 Is Nothing Then
Set diapaz2 = diapaz1.Rows(i).EntireRow
Else
Set diapaz2 = Application.Union(diapaz2, diapaz1.Rows(i).EntireRow)
End If
End If
Next
If diapaz2 Is Nothing Then
MsgBox "Ненайдено ниодной пустой строки!"
Else
diapaz2.[Insert]
End If
End Sub
Пример четвертого VBA-кода:
Если же вы хотите, чтобы макрос работал исключительно только для пустых строк предварительно выделенного определенного диапазона листа перед запуском макроса, то в начале макроса следует изменить строку создания экземпляра объекта для переменной diapaz1, на:
Set diapaz1 = Selection
Читайте также: Как выделить столбцы в Excel макросом.
Внимание! Следует помнить о том, что если таким образом создавать экземпляр объекта для переменной diapaz1, то тогда нельзя перед запуском макроса выделять все ячейки листа или все ячейки любого столбца. Иначе это затормозит программу Excel, так как один лист содержит аж 1 048 576 строк и тогда они все будут обрабатываться макросом, а пользователь будет ждать.
I use this code to create a new sheet and list all the sheet names in the workbook with empty rows in between them and then it hides all the empty rows in between the sheet name.
But its taking over over a min to complete is there a more efficient way of doing this?
Sub ListAllSheetNames()
'Disabling the following to speed up the vba code
ActiveSheet.DisplayPageBreaks = False
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'code to create new sheet and list all sheet names in workbook
Dim xWs As Worksheet
On Error Resume Next
xTitleId = "All Sheet Names"
Application.Sheets(xTitleId).Delete
Application.Sheets.Add.Index
Set xWs = Application.ActiveSheet
xWs.Name = xTitleId
For i = 2 To Application.Sheets.Count
'Edit this to adjust the row spacing, number after *
xWs.Range("A" & ((i - 2) * 18) + 1) = Application.Sheets(i).Name
Next
'Hides all empty rows
Set Rng = Range("A1", Range("A15000").End(xlUp))
For Each cel In Rng
If Not cel.Value > 0 Then
cel.EntireRow.Hidden = True
End If
Next cel
Range("A1").Select
'UnDisabling
ActiveSheet.DisplayPageBreaks = True
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Rdster
1,8461 gold badge14 silver badges30 bronze badges
asked Dec 1, 2016 at 18:01
Instead of the brute-force approach:
For Each cel In Rng
If Not cel.Value > 0 Then
cel.EntireRow.Hidden = False
End If
Next cel
You should be able to do simply:
Rng.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
Using SpecialCells(xlCellTypeBlanks)
should be nearly instantaneous (although even in my tests,it only took a few seconds to do the brute force iteration).
answered Dec 1, 2016 at 18:10
David ZemensDavid Zemens
52.8k11 gold badges79 silver badges129 bronze badges
1
The problem is that there are 16384 cells in each row and you are iterating through 16384 * (Sheet Count - 1) * 18
cells
For Each cel In Rng
If Not cel.Value > 0 Then
cel.EntireRow.Hidden = True
End If
Next cel
This is better
For Each rw In Rng.Rows
If Not rw.Cells(1,1).Value > 0 Then
rw.Hidden = True
End If
Next rw
I would hide the rows as I add the Sheet Names:
Sub ListAllSheetNames()
Const xTitleId = "All Sheet Names"
Application.ScreenUpdating = False
'code to create new sheet and list all sheet names in workbook
Dim xWs As Worksheet, ws As Worksheet
Dim i As Long
On Error Resume Next
DeleteWorksheet xTitleId
Application.Sheets.Add
Set xWs = Application.ActiveSheet
xWs.Name = xTitleId
i = 1
For Each ws In Sheets
xWs.Cells(i, 1).Value = ws.Name
xWs.rows(i + 1).Resize(17).Hidden = True
i = i + 18
Next
Range("A1").Select
Application.ScreenUpdating = True
End Sub
Sub DeleteWorksheet(SheetName As String)
Application.DisplayAlerts = False 'Resets when the Sub Exits
On Error Resume Next 'Resets when the Sub Exits
Sheets(SheetName).Delete
End Sub
answered Dec 1, 2016 at 18:28
0
-4 / 0 / 0 Регистрация: 21.04.2021 Сообщений: 157 |
|
1 |
|
Excel Скрыть пустые строки на листе28.02.2023, 13:50. Показов 477. Ответов 13
Добрый день. Можете помоч скрит пустых строк с формулой или макросом в 1-листе.
0 |
2630 / 1636 / 744 Регистрация: 23.03.2015 Сообщений: 5,141 |
|
28.02.2023, 14:21 |
2 |
1 |
-4 / 0 / 0 Регистрация: 21.04.2021 Сообщений: 157 |
|
28.02.2023, 14:30 [ТС] |
3 |
Тут все вруную. Я попробоваль много вариантов но не получилос там в файле есть макрос Удалить_пустых_строк() но он удаляеть пустых строк везде. Мне надо чтоб он работаль в диапазоне строк 62:90 и 110:139. Не удалил а скриль строк в этом диапазоне.
0 |
MikeVol Ученик 87 / 69 / 16 Регистрация: 01.04.2020 Сообщений: 247 |
||||
28.02.2023, 15:18 |
4 |
|||
ulugbek tulakov, Здравствуйте. Пробуйте:
На форуме полно тем с таким же вопросом. Поиск рулит. P.S. Забыл сказать что остальные строки (110:139) по аналогии сделайте сами.
1 |
Jack Famous 531 / 164 / 27 Регистрация: 10.05.2021 Сообщений: 535 Записей в блоге: 7 |
||||
28.02.2023, 15:37 |
5 |
|||
Ещё вариант по мотивам выше)))
MikeVol, это не удаление и можно сверху идти, как обычно
0 |
-4 / 0 / 0 Регистрация: 21.04.2021 Сообщений: 157 |
|
28.02.2023, 16:05 [ТС] |
6 |
Jack Famous, Спасибо. Но не работает вы прбовали в моём файле. Там в строках есть формули по этому можеть не работать? Если из-за формул не работаеть как быть.
0 |
Jack Famous 531 / 164 / 27 Регистрация: 10.05.2021 Сообщений: 535 Записей в блоге: 7 |
||||
28.02.2023, 16:22 |
7 |
|||
Но не работает вы прбовали в моём файле Так у вас там 0 стоят (строка не считается пустой), которые просто скрыты форматом ячейки Считаем ячейки с нолями пустыми
1 |
-4 / 0 / 0 Регистрация: 21.04.2021 Сообщений: 157 |
|
28.02.2023, 16:26 [ТС] |
8 |
Файле 1-листа имееть 3-форми 8, 8а и 8б там поставиться оценки студентам из предмета каторий сдаль экзамен. Форми 8а и 8б для неуспеваюших студентам. В конча листов есть семестровка он берёт оценки из листов.Сейчас семестровка берет оценки только с 8-форми. Неуспеваемих студентов есть оценка всех формах. Поэтому сделать формули чтоб в семестовку отобразилься самий максималний оценка студента из всех формах (8, 8а и 8б).
0 |
531 / 164 / 27 Регистрация: 10.05.2021 Сообщений: 535 Записей в блоге: 7 |
|
28.02.2023, 16:28 |
9 |
ulugbek tulakov, я ни черта не понял
0 |
-4 / 0 / 0 Регистрация: 21.04.2021 Сообщений: 157 |
|
28.02.2023, 17:03 [ТС] |
10 |
Так у вас там 0 стоят (строка не считается пустой), которые просто скрыты форматом ячейки Супер все работаль Добавлено через 21 минуту Добавлено через 5 минут
0 |
531 / 164 / 27 Регистрация: 10.05.2021 Сообщений: 535 Записей в блоге: 7 |
|
28.02.2023, 17:09 |
11 |
Для этого надо формула. Помогите. создайте новую тему. Вопрос этой не касается
1 |
Ученик 87 / 69 / 16 Регистрация: 01.04.2020 Сообщений: 247 |
|
28.02.2023, 19:42 |
12 |
ulugbek tulakov, а мой вариант из поста #4 не подошёл?
0 |
-4 / 0 / 0 Регистрация: 21.04.2021 Сообщений: 157 |
|
01.03.2023, 04:40 [ТС] |
13 |
Jack Famous,
а мой вариант из поста #4 не подошёл? Не подошёл. Но также спасибо
0 |
531 / 164 / 27 Регистрация: 10.05.2021 Сообщений: 535 Записей в блоге: 7 |
|
01.03.2023, 09:22 |
14 |
мой вариант из поста #4 не подошёл? так я свой на основе вашего и делал. У ТСа нули в строках (которые нужно считать пустыми) и СЧЁТЗ/СЧИТАТЬПУСТОТЫ (в том виде) не подойдут
я знаю что это не удаление я прост на всякий случай)))
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
01.03.2023, 09:22 |
14 |