Удалить строки по условию Excel

Хитрости » 28 Май 2011 Дмитрий 514965 просмотров

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

Способ первый:
Использовать встроенное средство Excel — фильтр. Сначала его необходимо «установить» на листе:

  • Выделяем таблицу с данными, включая заголовки. Если их нет — то выделяем с самой первой строки таблицы, в которой необходимо удалить данные
  • устанавливаем фильтр:
    • для Excel 2003: Данные-Фильтр-Автофильтр
    • для Excel 2007-2010: вкладка Данные(Data) -Фильтр(Filter)(или вкладка Главная(Home) -Сортировка и фильтр(Sort&Filter) -Фильтр(Filter))

Теперь выбираем условие для фильтра:

  • в Excel 2003 надо выбрать Условие и в появившейся форме выбрать непосредственно условие(«равно», «содержит», «начинается с» и т.д.), а напротив значение в соответствии с условием.
  • Для 2007-2010 Excel нужно выбрать Текстовые фильтры(Text Filters) и либо сразу выбрать одно из предлагаемых условий, либо нажать Настраиваемый фильтр(Custom Filter) и ввести значения для отбора в форме

После этого удалить отфильтрованные строки. В 2007 Excel могут возникнуть проблемы с удалением отфильтрованных строк, поэтому рекомендую сначала так же прочитать статью: Excel удаляет вместо отфильтрованных строк — все?! Как избежать.

Способ второй:
применить код VBA, который потребует только указания значения, которое необходимо найти в строке и номер столбца, в котором искать значение.

Если значение sSubStr не будет указано, то будут удалены строки, ячейки указанного столбца которых, пустые.
Данный код необходимо поместить в стандартный модуль. Вызвать с листа его можно нажатием клавиш Alt+F8, после чего выбрать Del_SubStr и нажать Выполнить. Если в данном коде в строке
If -(InStr(Cells(li, 1), sSubStr) > 0) = lMet Then
вместо = lMet указать lMet, то удаляться будут строки, не содержащие указанное для поиска значение. Иногда тоже удобно.
Но. Данный код просматривает строки на предмет частичного совпадения указанного значения. Например, если Вы укажете текст для поиска «отчет», то будут удалены все строки, в которых встречается это слово(«квартальный отчет», «отчет за месяц» и т.д.). Это не всегда нужно. Поэтому ниже приведен код, который будет удалять только строки, указанные ячейки которых равны конкретно указанному значению:

Здесь так же, как и в случае с предыдущим кодом можно заменить оператор сравнения(Cells(li, lCol) = sSubStr) с равно на неравенство(Cells(li, lCol) sSubStr) и тогда удаляться будут строки, значения ячеек которых не равно указанному.

УДАЛЕНИЕ СТРОК НА ОСНОВАНИИ СПИСКА ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
Иногда бывают ситуации, когда необходимо удалить строки не по одному значению, а по нескольким. Например, если строка содержит или Итог или Отчет. Ниже приведен код, при помощи которого можно удалить строки, указав в качестве критерия диапазон значений.
Значения, которые необходимо найти и удалить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — они все будут удалены. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.

If CStr(arr(li, 1)) = sSubStr Then

заменить на такую:

If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

УДАЛЕНИЕ ИЗ ЛИСТА СТРОК, КОТОРЫХ НЕТ В СПИСКЕ ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
Т.к. в последнее время стало поступать все больше и больше вопросов как не удалять значения по списку, а наоборот — оставить в таблице только те значения, которые перечислены в списке — решил дополнить статью и таким кодом.
Значения, которые необходимо оставить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — после работы кода на листе будут оставлены только те строки, в которых присутствует хоть одно из перечисленных в списке значений. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.
В отличие от приведенных выше кодов, данный код ориентирован на то, что значения в списке указаны не полностью. Т.е. если необходимо оставить только те ячейки, в которых встречается слово «активы», то в списке надо указать только это слово. В этом случае если в ячейке будет записана фраза «Нематериальные активы» или «Активы сторонние» — эти ячейки не будут удалены, т.к. в них встречается слово «активы». Регистр букв при этом неважен.

Чтобы код выше сравнивал значения таблицы со значениями списка по точному совпадению слов, а не по частичному, то надо строку:

If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

заменить на такую:

If CStr(arr(li, 1)) = sSubStr Then

Для всех приведенных кодов можно строки не удалять, а скрывать. Для этого надо строку:

If Not rr Is Nothing Then rr.EntireRow.Delete

заменить на такую:

If Not rr Is Nothing Then rr.EntireRow.Hidden = True

По умолчанию все коды начинают просмотр строк с первой по последнюю заполненную на листе. И если необходимо удалять строки не с первой или не по последнюю, то надо внести корректировки в эту строку:

For li = 1 To lLastRow ‘цикл с первой строки до конца

1 — это первая строка; lLastRow — определяется автоматически кодом и равна номеру последней заполненной строки на листе. Если надо начать удалять строки только с 7-ой строки(например, в первых 6-ти шапка), то код будет выглядеть так:

For li = 7 To lLastRow ‘цикл с седьмой строки до конца

А если надо удалять только с 3-ей по 300-ю, то код будет выглядеть так:

For li = 3 To 300 ‘цикл с третьей строки до трехсотой

Так же см.:
Что такое макрос и где его искать?
Что такое модуль? Какие бывают модули?
Как создать кнопку для вызова макроса на листе
Удаление всех пустых строк в таблице
Удаление пустых столбцов на листе
Установить Быстрый фильтр
Фильтр

Статья помогла? Поделись ссылкой с друзьями!Видеоуроки

Поиск по меткам

Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки Надстройки Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx

Прежде чем перейти к теме статьи, разберемся, с чем мы будем иметь дело. Посмотрим на иерархию объектов в Excel. Рабочая книга (Workbook) – это файл Excel, содержащий рабочие листы. Рабочий лист (Worksheet), в свою очередь, представляет собой электронную таблицу, основной тип документа, который используется приложением Excel для хранения и обработки данных. Рабочие листы — это таблицы, состоящие из ячеек, организованных в столбцы и строки и являются частью рабочей книги. Основным элементом электронной таблицы является ячейка. Именно в ячейках содержится информация – текст, значения, формулы. Каждая ячейка имеет свой адрес – номер строки и номер столбца, на пересечении которых находится ячейка. В этой статье более подробно остановимся на строках.

Строки в Excel и основные действия с ними

Количество строк в Excel 2003 – 65 536, а число строк в Excel 2007 и Excel 2010 – уже 1 048 576. Наиболее частыми действиями со строками являются копирование, вставка, добавление новых строк, удаление и скрытие. Без особого труда можно преобразовать Excel строку в столбец и наоборот. Такое преобразование называется транспонированием. Для преобразования строки в столбец необходимо скопировать данные строки, после чего нажать правую кнопку мыши и из контекстного меню выбрать пункт «Специальная вставка…». В появившемся диалоговом окне «Специальная вставка» поставить галочку в поле «транспонировать» и нажать кнопку ОК.

Все манипуляции со строками не представляют какой-либо особой сложности, но задача существенно усложняется, когда работать приходится с большими объемами данных и в особых условиях, когда к примеру нельзя воспользоваться стандартными средствами Excel, такими как сортировка. В таких случаях на помощь как всегда приходят макросы VBA. С помощью макросов VBA Excel строки легко поддаются обработке, можно например скрыть все пустые строк и или удалить строки содержащие заданный текст.

Далее рассмотрим инструмент, в котором реализовано программное скрытие и удаление пустых строк, а также скрытие и удаление любых строк, по заданным пользователем условиям, при этом все параметры для работы программы задаются не в редакторе программного кода, а в диалоговом окне, что очень удобно. Надстройка работает как с видимыми так и со скрытыми и отфильтрованными строками.

Надстройка для удаления и скрытия строк по условию

Надстройка позволяет:

1) Скрывать либо удалять строки, подходящие под заданное условие;

2) скрывать либо удалять строки, находящиеся ниже или выше строк, подходящих под заданное условие;

3) скрывать либо удалять заданное количество строк для каждого действия;

4) скрывать либо удалять разное количество строк для каждого действия, если количество строк указано в отдельном столбце;

5) выбирать одно из нескольких условий для искомых значений (совпадает, не совпадает, содержит, не содержит, начинается, не начинается, заканчивается, не заканчивается);

6) находить пустые строки и строки, содержащие заданный текст (либо массив из текстовых значений);

7) осуществлять одновременный поиск различных текстовых выражений, внесенных в поле для ввода текста с использованием знака-разделителя. В качестве знака-разделителя используется (;) точка с запятой;

8) выбирать различные диапазоны для обработки данных;

9) ограничивать выбранные диапазоны номерами строк сверху и/или снизу для избежания повреждения шапок таблиц и строк с разного рода промежуточными итогами;

10) осуществлять поиск текста в строках как с учетом регистра, так и без.

Диалоговое окно надстройки

макрос (надстройка) для удаления/скрытия пустых строк и строк по условию

По изображению диалогового окна можно получить представление о том, какие возможности предоставляются надстройкой — это удаление/скрытие пустых строк и строк, подходящих под заданные условия.

Как скрыть или удалить строки по условию?

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

При помощи надстройки можно производить действия не только с самими строками, которые подходят под заданное условие, но и со строками, которые находятся выше или ниже этих строк. Кроме того, предусмотрена возможность задать количество строк для каждого действия.

Как скрывать или удалять разное количество строк?

Если в диалоговом окне надстройки установить флажок в поле «Разное количество строк», то числовое значение в поле «Для каждого действия, шт.» меняется на номер столбца, в котором содержатся значения для каждого действия. В этом случае за каждое действие будет скрыто или удалено столько строк, сколько указано в соответствующей строке заданного столбца.

При выгрузке из учетной программы, при скачивании данных из интернета или, если файл заполняется неопытным пользователем, случается, что в ячейках остаются лишние символы, пробелы, точки, знаки переноса строки и т.п. Как быстро и просто удалить любой символ в ячейке Excel?

Самая распространенная ошибка, когда Excel не воспринимает текст как число. Об этом можно . Способов как удалить символ в ячейке много, постараюсь рассказать о каждом подробнее.

1. Найти и заменить символ в ячейке Excel

Если вкратце, то существует специальный инструмент во всех продуктах MS Office. Вызывается клавишами Ctrl+F (найти) или Ctrl+H (заменить). В первое поле можно вписать символ, который нужно удалить, во второе ничего не вписывайте.

Подробнее об этом инструменте написано в этой статье

2. Удалить символ в ячейке Excel формулой

Удалить любой символ можно прекрасной функцией =ПОДСТАВИТЬ().

Эта функция имеет следующую конструкцию =ПОДСТАВИТЬ(текст;старый_текст;новый_текст;номер_вхождения)

текст — здесь указывается ячейка, где записан текст для изменения

старый_текст — что меняем

новый_текст — на что меняем

номер_вхождения — является необязательным. Он предписывает Excel заменить только символы, начиная с определенного номера. Интересное дополнение

Представим, что вам нужно заменить все точки на запятые, получится формула:

=ПОДСТАВИТЬ(A1;».»;»,»)

3. =СЖПРОБЕЛЫ()

Часто пробелы не видны невооруженным глазом («Иванов Иван «), нужно писать дополнительную проверку, чтобы найти их, в общем, предпринимать дополнительные действия. Проще всего воспользоваться формулой =СЖПРОБЕЛЫ(). Она убирает все задвоенные пробелы, а так же лишние пробелы в конце и начале текста в ячейке (станет «Иванов Иван») .

Но! Будьте внимательнее — формула удаляет стандартные пробелы. Если вы к примеру копировали текст с сайта — он может содержать символы похожие на пробелы, но функция =СЖПРОБЕЛЫ() не будет их удалять. В таком случае придется пользоваться возможностью Найти и заменить.

Но в 95% случаев сжпробелы помогает на «отлично».

Удаление пробелов я даже вынес в отдельную статью

4. Удалить первый символ

Часто необходимо удалить первый, несколько последних символов и так далее. Как это сделать быстро и не вручную? Воспользуйтесь функцией ПСТР.

Очень подробно об этом .

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

Формула будет выглядеть следующим образом:

=ПСТР(A:A;ПОИСК(«.»;A:A)+2;ДЛСТР(A:A)-ПОИСК(«.»;A:A))

Так же можно разделить текст по столбцам и разнести их в разные ячейки.

Пример

5. Функция =ПЕЧСИМВ()

Функция с одним аргументом очень похожа на СЖПРОБЕЛЫ, но она удаляет непечатные символы в строке, такие как перенос строки, знаки абзаца, какие-нибудь квадратики и т.п. (первые 32 непечатаемых знаков в 7-разрядном коде ASCII). Особенно полезна она, если нужно удалить перенос строки — мне всегда помогает.

Внимание! ПЕЧСИМВ способна удалить большинство, но не все лишние символы.

В этой статье я объясню, почему удаление пустых строк в Excel при помощи выделить пустые ячейки > удалить строку – это плохая идея, и покажу Вам 2 быстрых и правильных способа, как удалить пустые строки не разрушая данные. Все эти способы работают в Excel 2013, 2010 и в более старых версиях.

Если Вы читаете эту статью, то, скорее всего, постоянно работаете в Excel с большими таблицами. Вы знаете, что пустые строки периодически появляются среди данных, ограничивая работу большинства инструментов Excel с таблицами (сортировка, удаление дубликатов, промежуточные итоги и так далее), не позволяя им правильно определять диапазон данных. И каждый раз приходится вручную определять границы, иначе итогом будет неверный результат и уйма потраченного времени на исправление ошибок.

Существует множество причин, почему появляются пустые строки. К примеру, Вы получили рабочую книгу Excel от другого человека или в результате экспорта из корпоративной базы данных, или ненужные данные в строках были удалены вручную. В любом случае, если Ваша цель – удалить все эти пустые строки и получить чистую и аккуратную таблицу, то следуйте простым шагам, приведённым ниже:

  • Никогда не удаляйте пустые строки, при помощи выбора пустых ячеек
  • Удаление пустых строк при помощи ключевого столбца
  • Удаление пустых строк в таблице без ключевого столбца

Никогда не удаляйте пустые строки, при помощи выбора пустых ячеек

Повсюду в интернете Вы можете встретить простой совет, якобы позволяющий удалить пустые строки:

  • Выделите данные от первой до последней ячейки.
  • Нажмите F5, чтобы открыть диалоговое окно Go to (Переход).
  • В диалоговом окне нажмите кнопку Special (Выделить).
  • В диалоговом окне Go to special (Выделить группу ячеек) отметьте пункт Blanks (Пустые ячейки) и нажмите ОК.
  • Кликните правой кнопкой мыши по любой из выделенных ячеек и нажмите Delete (Удалить).
  • В диалоговом окне Delete (Удаление ячеек) выберите Entire row (Строку) и нажмите ОК.

Это очень плохой способ, делайте так только с очень простыми таблицами с парой дюжин строк, которые помещаются на одном экране, а ещё лучше – не делайте так совсем! Главная причина – если строка с важными данными содержит хотя бы одну пустую ячейку, то удалена будет вся строка.

Например, у нас есть таблица клиентов, всего 6 строк. Мы хотим удалить строки 3 и 5, потому что они пустые.

Сделайте так, как предложено выше, и получите такой результат:

Строка 4 (Roger) тоже исчезла, потому что ячейка D4 в столбце Traffic source оказалась пуста

Если Ваша таблица не велика, то Вы заметите потерю данных, но в реальных таблицах с тысячами строк Вы можете неосознанно удалить дюжины нужных строк. Если повезёт, Вы обнаружите потерю в течение нескольких часов, восстановите рабочую книгу из резервной копии и продолжите работу. А что если не повезёт, и у Вас не будет резервной копии?

Далее в этой статье я покажу Вам 2 быстрых и надёжных способа удалить пустые строки из листов Excel.

Удаление пустых строк при помощи ключевого столбца

Этот метод работает, если в Вашей таблице есть столбец, который помогает определить, пуст рассматриваемый столбец или нет (ключевой столбец). К примеру, это может быть ID покупателя или номер заказа, или что-то подобное.

Нам важно сохранить порядок строк, поэтому мы не сможем просто отсортировать таблицу по этому столбцу, чтобы переместить все пустые строки вниз.

  1. Выделите всю таблицу, от первой до последней строки (нажмите Ctrl+Home, а затем Ctrl+Shift+End).
  2. Добавьте автофильтр к таблице. Для этого на вкладке Data (Данные) нажмите кнопку Filter (Фильтр).
  3. Примените фильтр к столбцу Cust#. Для этого нажмите кнопку со стрелкой в заголовке столбца, снимите галочку в опции Select All (Выделить все), пролистайте вниз к концу списка (на практике этот список может быть весьма длинным) и поставьте галочку в строке Blanks (Пустые) в самом низу списка. Нажмите ОК.
  4. Выделите все отфильтрованные строки: нажмите Ctrl+Home, затем стрелку вниз, чтобы перейти к первой строке с данными, а затем нажмите Ctrl+Shift+End.
  5. Кликните правой кнопкой мыши по любой выделенной ячейке и из контекстного меню выберите Delete row (Удалить строку) или просто нажмите Ctrl+-(знак минус).
  6. В появившемся окне с вопросом Delete entire sheet row? (Удалить всю строку листа?) нажмите ОК.
  7. Очистите применённый фильтр: на вкладке Data (Данные) нажмите кнопку Clear (Очистить).
  8. Отлично! Все пустые строки полностью удалены, а строка 3 (Roger) по-прежнему на месте (сравните с результатом предыдущей попытки).

Удаление пустых строк в таблице без ключевого столбца

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

В этом случае у нас нет ключевого столбца, который бы помог определить пуста строка или нет. Поэтому, мы добавляем вспомогательный столбец к таблице:

  1. В конце таблицы добавьте столбец с именем Blanks и вставьте следующую формулу в первую ячейку столбца:

    =COUNTBLANK(A2:C2)
    =СЧИТАТЬПУСТОТЫ(A2:C2)

    Эта формула, как и обещает её имя, подсчитывает пустые ячейки в заданном диапазоне. A2 и C2 – это соответственно первая и последняя ячейки текущей строки.

  2. Скопируйте формулу на весь столбец. Как это сделать – смотрите пошаговую инструкцию Как вставить одинаковую формулу сразу во все выбранные ячейки.
  3. Теперь в нашей таблице есть ключевой столбец! Примените фильтр к столбцу Blanks (выше дана пошаговая инструкция, как это сделать) чтобы показать строки только с максимальным значением (3). Число 3 означает, что все ячейки в этой строке пусты.
  4. Далее выделите все отфильтрованные строки и удалите их целиком. Как это сделать – описано выше.В результате пустая строка (строка 5) будет удалена, все остальные строки (с пустыми ячейками или без) останутся на своём месте.
  5. Теперь вспомогательный столбец можно удалить. Или Вы можете применить другой фильтр, чтобы показать только те ячейки, в которых есть одна или несколько пустых ячеек.Для этого снимите галочку в строке со значением 0 (ноль) и нажмите ОК.

Оцените качество статьи. Нам важно ваше мнение: