Удаление всех пустых строк на листе
Во многих случаях пустые строки на листе представляют собой проблему. Например, если ваша таблица с данными содержит пустые строки, то возникнут сложности с фильтрацией, сортировкой, построением сводных, т.к. Microsoft Excel считает пустую строку разрывом таблицы.
Обычно для удаления пустых строк включают фильтр, отбирают пустые строки вручную и затем их удаляют, что хотя и не сложно, но занимает некоторое время.
Для автоматизации подобной задачи проще всего использовать простой макрос. Нажмите Alt + F11 или выберите на вкладке Разработчик — Visual Basic (Developer — Visual Basic Editor) . Если вкладки Разработчик не видно, то можно включить ее через Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon) .
В открывшемся окне редактора Visual Basic выберите в меню Insert — Module и в появившийся пустой модуль скопируйте и вставьте следующие строки:
Закройте редактор и вернитесь в Excel.
Теперь нажмите сочетание Alt + F8 или кнопку Макросы на вкладке Разработчик. В открывшемся окне будут перечислены все доступные вам в данный момент для запуска макросы, в том числе только что созданный макрос DeleteEmptyRows. Выберите его и нажмите кнопку Выполнить (Run) — все пустые строки на листе будут удалены.
Удаление (скрытие) строк по условию
макрос удалит на листе все строки, в которых содержится искомый текст:
Чтобы вместо удаления просто скрыть такие строки, замените строку
Расширенная версия этого макроса — с использованием UserForm для ввода искомого значения
Ещё один вариант кода, позволяющего выполнять поиск (с последующим удалением или скрытием строк) сразу по нескольким условиям:
ConditionalRowsDeleting.xls | 24 КБ |
ConditionalRowsDeletingUsingUserform.xls | 45.5 КБ |
- 216200 просмотров
Комментарии
Я не занимаюсь поддержкой бесплатных макросов, и модификацией их под ваши требования.
В комментариях к статье есть очень много вариантов переделки этого макроса, — полистайте комменты, может найдете подходящий вариант кода.
Если же хотите получить готовое решение, — оформляйте заказ на сайте, сделаю (платно. минимальная стоимость заказа 1500 рублей)
Добавление комментариев к данной статье на этом отключаю.
Подскажите пожалуйста. Мучаюсь уже неделю. Не могу переделать существующие макросы для скрытия строк. Имеется таблица с цифрами. Нужно что бы скрывались строки если одновременно в столбце А и В и С и D значение меньше чем 0. Было бы не плохо это значение вводить в user form и там были кнопочки скрыть и показать все. Помогите пожалуйста. Да и ещё количество строк может бить разное. А цифровые значения начинаются с второй строки.
Здравствуйте, у меня такая ситуация. Есть таблица, с 3000 строками, и примерно 25 столбиками
Первые 10 столбиков заполнены текстом, с 11 по 25 столбик бывают цифры. Как мне удалить полностью строку, если в столбики с 11 по 25 все пустые ячейки ? а если хоть одна ячейка заполнена, то строку не трогать? но на первые десять столбиков не надо обращать внимание
А как сделать такое же условие для объеденных ячеек только по нескольким значениям?
Я должен был догадаться, какие листы надо обрабатывать, а какие нет?
Чтобы обработать ВСЕ листы, — напишите
Большое спасибо, но у меня следующие листы "3", "3А", "3Б", "4".
Подскажите, как сделать этот макрос для листов "2", "2А", "2Б" и т. д.
Sub УдалениеСтрокПоУсловию()
Dim ra As Range, delra As Range, ТекстДляПоиска As String
Application.ScreenUpdating = False ‘ отключаем обновление экрана
ТекстДляПоиска = "Наименование ценности" ‘ удаляем строки с таким текстом
‘ перебираем все строки в используемом диапазоне листа
For Each ra In ActiveSheet.UsedRange.Rows
‘ если в строке найден искомый текст
If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
‘ добавляем строку в диапазон для удаления
If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
End If
Next
‘ если подходящие строки найдены — удаляем их
If Not delra Is Nothing Then delra.EntireRow.Delete
End Sub
Если необходимо наоборот отобразить строки "EntireRow.Hidden = False"
То как осуществить поиск текста в скрытых строках/столбцах?
Здравствуйте. Подскажите, пожалуйста, как прописать макрос так, чтоб он:
1. удалял все строки с заливкой цветом, или
2. удалял все строки, содержащие какую либо ячейку с заливкой цветом.
Спасибо.
Игорь,благодарю за макрос — облегчает жизнь! Вы не посоветуете как работать с этим макросом при защите листа?
Добрый день! Подскажите пожалуйста, Как сделать макрос скрывающий строки при условии что в двух подряд столбцах 0 или пусто? и чтоб он запускался не при открытии файла, а кнопкой?
у меня вариант с условием одного столбца, как его исправить
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim d As Integer
d = UsedRange.Rows.Count + 1
For rwIndex = 1 To 31
colIndex = 3
If Cells(rwIndex, colIndex).Value = 0 Then
Rows(rwIndex).Hidden = True
End If
Next
End Sub
Буду очень признательна)
Добрый день! У меня проблема с большими таблицами и с их колличеством) В одной книге у меня 25 листов на каждом большие таблицы, для удбства печати я создала макрос скрывающий ненужные строки, столбцы и ячейки во всей книге сразу, поочередно на каждом листе. Теперь хочу чтоб можно было сразу во всей книге развернуть скрытые ячейки. И не могу) Подскажите как исправить этот макрос чтоб он работал в модуле "Эта книга" для всех листов сразу
Sub Show()
Columns.Hidden = False
Rows.Hidden = False
Во — то что доктор прописал — спасибо! И извините за не корректность:)
Сандер, я написал код так, как вы просили, — если в ячейке присутствует цифра, то строка удаляется.
А вам надо было удалять только ячейки с ЧИСЛОМ (а не содержащие цифры)
Замените
Увы. работает аналогично с "Удаление (скрытие) строк по условию", т.е. если в тексте присутствует допустим "Адаптер АТ-2000 14 В22" — что там, что в вашем примере удаляет строку. Просто думал — есть что-нить персональное с цифрами.
Сандер, так попробуйте:
Здравствуйте! Пролистал, прочитал — таки не нашел ответ к своей задаче, а она такова: в столбце чередуются и текст и цифры — надо удалить строки которые содержат цифры(они естно — разные). Спасибо!
Евгений, при работе макросов, отмена действий в Excel не работает
(что сделано макросом, никак не отменить, — так устроен Excel)
Подскажите. после удаления строк с помощью макроса, нельзя почему то вернуть назад назад изменения.Что нужно сделать чтоб вернуть изменения назад.
Здравствуйте, Нурьяна.
Моя программа нормально работает, — если ей правильно настроить
(настройка под каждый конкретный сайт, — от 1500 руб, + сама программа 2500 стоит)
PS: на будущее, размещайте коммент не в первой попавшейся статье, а в статье с описанием программы-парсера
http://excelvba.ru/programmes/Parser
можете сразу оформить заказ на парсер, в таком виде:
http://excelvba.ru/programmes/Parser/order
Здравствуй Админ! Долго Вас искала. подрабатываю на СП закупках, и уже замучилась с заполнением каталогов, сил больше нет. Как-то покупала граббер у одного программиста, ну вообще не довольна , на одну закупку граббер стоит 2800, и работает через раз. Скажите как работает Ваша программа и сколько стоит, и можно ее настроить под сайт на котором я работаю и пользоваться ею постоянно один раз заплатив?
Можем сделать под заказ, — всё будет работать как надо.
Хоть убейте — не работает. Идея в том, что макрос срабатывает при нажатии на ячейку. Берет значение из текущей активной строки и 2 столбца, ищет на другом листе и должен его просто выделить. Вся идея.
В коде грешу на
"ВзятьДанные = Cells(ActiveCell.Row, 2).Value"
Он не берет значение -> не может найти его на другом листе. Как заставить его видеть значение. ( Кавычки ставил — не помогает.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim ra As Range, finra As Range
If Target.Cells.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF3:AF5000")) Is Nothing Then
ВзятьДанные = Cells(ActiveCell.Row, 2).Value
Sheets("Результат").Select
For Each cell In Range("A3:A2000").Cells
If cell = ВзятьДанные Then
If finra Is Nothing Then Set finra = cell Else Set finra = Union(finra, cell)
End If
Next
If Not finra Is Nothing Then finra.EntireRow.Select
Application.ScreenUpdating = True
End If
End Sub
Андрей, так попробуйте
Со скрытием строчек все отлично. но что делать, если в дальнейшем мне нужно некоторые скрытые строки вновь раскрыть (т.к. признак для скрытия для них может в будущем быть нерелевантен)?
Сделал такую билеберду, но скрытые строки он не раскрывает 🙁 Видимо не видит скрытые строки. Помогите советом пожалуйста!
Sub Макрос()
Dim ra As Range, delra As Range, ТекстДляПоиска As String
Application.ScreenUpdating = False
For Each ra In ActiveSheet.UsedRange.Rows
If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
End If
Next
If Not delra Is Nothing Then delra.EntireRow.Hidden = False
End Sub
Кирилл, так попробуйте:
УдалятьСтрокиСТекстом = Worksheets("ИмяВторогоЛиста").range("a2:a10")
или так
УдалятьСтрокиСТекстом = Worksheets(2).range("a2:a10")
Добрый день! Ваш макрос очень выручает, Подскажите, как сделать, чтобы слова для поиска брались не из строки = Array("Наименование *", "Количество", "текст?", "цен*сти", "*78*"),а с другого листа
Спасибо, заработало.
Ну я и тупой.
Sub погрузка()
Dim ra As Range, delra As Range
Application.ScreenUpdating = False ‘ отключаем обновление экрана
‘ ищем и удаляем строки, содержащие заданный текст
‘ (можно указать сколько угодно значений и использовать подстановочные знаки)
УдалятьСтрокиСТекстом = Array("ИД пункта:", "ИД маршрута:", _
"Название модели:", "Склад отгрузки:")
‘ перебираем все строки в используемом диапозоне листа
For Each ra In ActiveSheet.UsedRange.Rows
‘ перебираем все фразы в массиве
If ra.Row >= 17 Then
For Each word In УдалятьСтрокиСТекстом
Next word
End If
‘ если в очередной строке листа найден искомый текст
If Not ra.Find(word, , xlValues, xlPart) Is Nothing Then
‘ добовляем строку в диапазон для удаления
If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
End If
Next
‘ если подходящие строки найдены, то (оставте одну из следующих строк)
If Not delra Is Nothing Then delra.EntireRow.Hidden = True ‘ скрываем их
If Not delra Is Nothing Then delra.EntireRow.Delete ‘ удаляем их
End Sub
Пожалуйста, подскажите что не так, в таком исполнении не хочет удалять с 17 строки.
Gjlcrf;bnt xnj yt nfr
If ra.row >= 17 then
For Each word In УдалятьСтрокиСТекстом
.
Next word
end if
Похоже я не совсем правильно выразил свою мысль, в макросе УдалениеСтрокПоНесколькимУсловиям нужно удалять строки с определенным текстом только с 17 строки и до конца листа.
Вместо
If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
пишете
ra.Replace ("Что заменить", "")
нет, мне в этом макросе нужно что бы текст удалялся с определенной сторки.
Судя по описанию задачи, Вам нужна штатная функция Эксель — заменить. Ctrl+H. Найти — пишете нужный Вам текст, поле "Заменить на" оставляете пустым.
а можете подсказать, как можно найти и удалить текст с определенной строки.