Мир MS Excel » Вопросы и решения » Вопросы по Excel » Удаление пустых строк (Удаление макросом)
Удаление пустых строк
Мур
Дата: Понедельник, 08.08.2011, 22:47 | Сообщение № 1
Serge_007
Дата: Понедельник, 08.08.2011, 23:12 | Сообщение № 2
И ещё пара вариантов: [vba]
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub DeleteEmptyStrings() Dim intLastRow As Integer ‘ Номер последней используемой строки Dim intRow As Integer ‘ Номер проверяемой строки
‘ Получение номера последней используемой строки intLastRow = Worksheets(ActiveSheet.Index).UsedRange.Row + _ Worksheets(ActiveSheet.Index).UsedRange.Rows.Count — 1 ‘ Счетчик устанавливается на используемую первую строку intRow = Worksheets(ActiveSheet.Index).UsedRange.Row ‘ Удаление пустых строк Do While intRow Sub DeleteEmptyStrings() Dim intRow As Integer Dim intLastRow As Integer
‘ Получение номера последней используемой строки intLastRow = ActiveSheet.UsedRange.Row + _ ActiveSheet.UsedRange.Rows.Count — 1
‘ Удаление пустых строк For intRow = intLastRow To 1 Step -1 If ActiveSheet.Rows(intRow).Text = «» Then ActiveSheet.Rows(intRow).Delete End If Next intRow End Sub
И ещё пара вариантов: [vba]
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub DeleteEmptyStrings() Dim intLastRow As Integer ‘ Номер последней используемой строки Dim intRow As Integer ‘ Номер проверяемой строки
‘ Получение номера последней используемой строки intLastRow = Worksheets(ActiveSheet.Index).UsedRange.Row + _ Worksheets(ActiveSheet.Index).UsedRange.Rows.Count — 1 ‘ Счетчик устанавливается на используемую первую строку intRow = Worksheets(ActiveSheet.Index).UsedRange.Row ‘ Удаление пустых строк Do While intRow Sub DeleteEmptyStrings() Dim intRow As Integer Dim intLastRow As Integer
‘ Получение номера последней используемой строки intLastRow = ActiveSheet.UsedRange.Row + _ ActiveSheet.UsedRange.Rows.Count — 1
‘ Удаление пустых строк For intRow = intLastRow To 1 Step -1 If ActiveSheet.Rows(intRow).Text = «» Then ActiveSheet.Rows(intRow).Delete End If Next intRow End Sub
Яндекс-деньги:41001419691823 | WMR:126292472390
Удаление пустых строк в Excel
Удаление пустых строк в Excel
Добрый день уважаемые читатели! Очень часто при работе с таблицами нам приходится удалять пустые строки. Когда таблица очень большая это становится реальной проблемой. Можно попробовать их скрыть, но тогда не получится видеть актуальную информацию (по адресам). Поэтому пойдём путём настоящих исследователей — создадим свою команду на удаление пустых строк. Предыдущая статья, посвящённая часам в ячейке — СТАТЬЯ.
На просторах интернета можно встретить ответ на поставленный вопрос, но, как правило, он сводится к одному:
На вкладке «Главная» нажимаем кнопку «Выделить»;
Выбираем «Пустые ячейки»;
Нажимаем «ОК»;
Нажимаем кнопку «Удалить».
Либо предлагается использовать фильтр. С помощью него выделить пустые строки, а затем их удалить.
Плюсом обоих способов является их «встроенность» в программу. Минусы — большое количество действий и, если таблица, большая, то сложно проверить результат. Но, как говорится, мы не ищем простых путей.
Как всегда напишем небольшой макрос. Его особенностью будет сам алгоритм нахождения пустых строк. Обычно макросы анализируют данные по строкам сверху вниз. Мы же заставим сделать наоборот — снизу вверх. Для того, чтобы не учитывать сдвиг удаляемых пустых строк. Таблица заготовка уже должна быть.
Вставим в наш документ новый модуль:
Вкладка «Разработчик», блок кнопок «Код», кнопка «Visual Basic»;
Далее «Insert» — > «Module».
Далее вставим следующий код:
Dim intRow as Integer Dim intLastRow as Integer ‘получение номера последней строки с данными intLastRow = ActiveSheet.UsedRange.Row + _ ActiveSheet.UsedRange.Rows.Count — 1
‘Удалить пустые строки For intRow = IntLastRow To 1 Step -1 If ActiveSheet.Rows(intRow).Text = «» Then ActiveSheet.Rows(intRow).Delete End If Next intRow End Sub
Немного пояснений. Первым делом объявляем две переменные — Row (строка) и LastRow (последняя строка). Тип целое.
Следующей строчкой мы показываем макросу найти последнюю строчку с данными на листе.
Далее «говорим» — в тех строчках где есть текст ничего не делать, где текста нет («») — эти строчки удалить. Вид таблицы до применения макроса.
Останется сохранить нашу книгу с поддержкой макросов (.xlsm) и выполнить макрос. Жмём на клавиатуре Alt+F8 и видим наш макрос (DeleteEmptyStrings). Щёлкаем «Выполнить»
Таблица примет следующий вид.
Видим, что вторая строка как будто пустая? Нет. В ней во второй ячейке я поставил пробел. Так что макрос правильно посчитал её не пустой и не удалил! Готово!
Ссылка на файл с макросом:
Если остались вопросы — смотрите наше новое видео!
Макрос для выделения и удаления пустых строк в Excel
Исходные коды макросов для выделения, удаления, скрытия и добавления пустых строк в таблицу 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]:
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-кода:
Макрос для скрытия пустых строк
Как скрыть пустые строки макросом? Но если вам нужно не удалить, а только скрыть (например, при подготовке документа на печать), тогда эту строку кода следует модифицировать несколько иначе:
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.H >True End If End Sub
Пример третьего VBA-кода:
Добавление строк макросом
Как вставить строки макросом? Если мы изменим код в этом же месте как показано ниже, то получиться инструмент для добавления и вставки строк после пустых:
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
Внимание! Следует помнить о том, что если таким образом создавать экземпляр объекта для переменной diapaz1, то тогда нельзя перед запуском макроса выделять все ячейки листа или все ячейки любого столбца. Иначе это затормозит программу Excel, так как один лист содержит аж 1 048 576 строк и тогда они все будут обрабатываться макросом, а пользователь будет ждать.
Как удалить пустые строки? Программное удаление пустых строк макросом VBA
Часто встречающейся операцией при работе с таблицами Excel является удаление пустых строк. Существуют как стандартные средства при помощи которых можно удалить пустые строки, так и нестандартные, с использованием программирования на Visual Basic for Application.
Стандартные способы удаления пустых строк
Удаление вручную
Самый распространенный, но при этом самый примитивный способ, при котором необходимо навести курсор на номер пустой строки и кликнуть по нему левой кнопкой мыши. Вся строка выделится. Если нажать и удерживать клавишу Ctrl на клавиатуре, можно выделить несколько строк. После этого их можно удалить все разом, кликнув правой кнопкой мыши в выделенной области и выбрав команду «Удалить» в контекстном меню. Этот способ целесообразно использовать когда необходимо удалить несколько строк.
Удаление при помощи сортировки
Когда предстроит удалить достаточно много строк, искать их зрительно не очень удобно. В этом случае можно использовать сортировку по возрастанию либо убыванию для того чтобы пустые строки сгруппировались и после этого удалить их, выделив сразу весь диапазон. При этом очередность строк нарушается и для того, чтобы ее затем восстановить, необходимо предварительно в спомогательном столбце ввести нумерацию всех строк для того чтобы воостановить первоначальную очередность после удаления пустых строк.
Удаление при помощи выделения группы ячеек
Для того чтобы удалить пустые строки в Excel 2007 и 2010 можно использовать возможностью выделения группы ячеек. Для этого выделяем столбец, содержащий пустые ячейки, после чего находим на ленте Excel вкладку «Главная», в группе «Редактирование» выбираем кнопку «Найти и выделить» и выбираем пункт «Выделение группы ячеек». В появившемся диалоговом окне «Выделение группы ячеек» включаем опцию «Пустые ячейки» и нажимаем кнопку ОК. В предварительно выделенном столбце будут выделены все пустые ячейки. Остается кликнуть правой кнопкой мыши в любом месте выделенного поля и выбрать пункт «Удалить. » в контекстном меню, а в появившемся диалоговом окне «Удаление ячеек» выбрать пункт «Строка» и нажать ОК. При этом, строго говоря, удаляются не пустые строки, а строки, содержащие пустые ячейки в предварительно выделенном столбце.
Нестандартные методы удаления пустых строк
Программное удаление макросом VBA
Стандартные способы просты в использовании, но имеют свои минусы. Если ни один из стандартных способов не подходит, то для решения этой задачи можно использовать процедуру, написанную на языке VBA, которая удалит все пустые строки в используемом диапазоне листа.
Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом , нажмите на одну из двух кнопкок в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).
Автоматическое удаление с использованием надстройки
Для тех, кому функциональности представленной процедуры будет недостаточно, предлагаю воспользоваться надстройкой, позволяющей удалять и скрывать не только пустые строки, но и строки, удовлетворяющие условиям пользователя, которые можно задавать в диалоговом окне.
Пользователь на свой выбор может удалять либо скрывать пустые строки. Может удалять либо скрывать строки содержащие либо не содержащие заданный текст, при этом на свой выбор учитывать либо не учитывать регистр. Возможен одновременный поиск сразу нескольких значений, введенных через точку с запятой (;). Пользователь также может на свое усмотрение расширять область действия макроса и ограничивать его, задавая номера первой и последней строки. Кроме того, надстройка освобождает пользователя от поиска нужного макроса, так как позволяет вызывать диалоговое окно прямо из панели инструментов Excel.
Еще одна надстройка, позволяющая скрывать и удалять строки и столбцы, в зависимости от значения ячейки и заданного условия, а также удаляющая пустые ячейки и ячейки с заданными значениями со сдвигом вверх и со сдвигом влево.