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

Обновлено: 04.07.2024

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

Вкладка Office позволяет редактировать и просматривать в Office с вкладками и значительно упрощает работу . Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%
  • Повторное использование чего угодно: Добавляйте наиболее часто используемые или сложные формулы, диаграммы и все остальное в избранное и быстро используйте их в будущем.
  • Более 20 текстовых функций: Извлечь число из текстовой строки; Извлечь или удалить часть текстов; Преобразование чисел и валют в английские слова.
  • Инструменты слияния : Несколько книг и листов в одну; Объединить несколько ячеек / строк / столбцов без потери данных; Объедините повторяющиеся строки и сумму.
  • Разделить инструменты : Разделение данных на несколько листов в зависимости от ценности; Из одной книги в несколько файлов Excel, PDF или CSV; От одного столбца к нескольким столбцам.
  • Вставить пропуск Скрытые / отфильтрованные строки; Подсчет и сумма по цвету фона ; Отправляйте персонализированные электронные письма нескольким получателям массово.
  • Суперфильтр: Создавайте расширенные схемы фильтров и применяйте их к любым листам; Сортировать по неделям, дням, периодичности и др .; Фильтр жирным шрифтом, формулы, комментарий .
  • Более 300 мощных функций; Работает с Office 2007-2019 и 365; Поддерживает все языки; Простое развертывание на вашем предприятии или в организации.

Удалить строки, не содержащие определенного текста, с помощью фильтра

Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!

В Excel функция «Фильтр» может быстро помочь вам отфильтровать строки, не содержащие определенного текста, а затем вы сможете выбрать их для удаления.

1. Выберите столбец, содержащий текст, на основе которого вы будете удалять строки, и нажмите Данные > Фильтр. Смотрите скриншот:

документ-удалить-строки-не-содержать-1
документ-удалить-строки-не-содержать-2

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

документ-удалить-строки-не-содержать-3

3. После этого вы увидите только строку заголовка, а строки, не содержащие определенного текста, будут отфильтрованы. Смотрите скриншот :

документ-удалить-строки-не-содержать-4

4. Выберите все из них, кроме строки заголовка, и щелкните правой кнопкой мыши, чтобы выбрать Удалить строку из контекстного меню. Смотрите скриншот:

документ-удалить-строки-не-содержать-5

5. Затем нажмите Данные > Фильтр снова, а затем удаляются все строки, не содержащие определенного текста. Смотрите скриншот:

документ-удалить-строки-не-содержать-6
документ-удалить-строки-не-содержать-7

Удалить строки, не содержащие определенного текста, с помощью VBA

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

1. Нажмите Alt + F11 для отображения Microsoft Visual Basic для приложений окно.

2. В окне нажмите Вставить > Модуль чтобы отобразить новое окно модуля, затем скопируйте следующий код VBA в окно модуля.

VBA: удалить всю строку, если ячейка содержит определенный текст.

3. Нажмите Запустите , и появится диалоговое окно, в котором вы сможете выбрать рабочий диапазон. Смотрите скриншот:

документ-удалить-строки-не-содержать-8

4. Затем нажмите OKи введите текст, на котором нужно удалить основу строк, в другом всплывающем диалоговом окне. Смотрите скриншот:

документ-удалить-строки-не-содержать-9

5. Нажмите OK, и строки, не содержащие Apple, будут удалены.

Удалить строки, не содержащие определенного текста, с помощью Kutools for Excel

Если вы думаете, что описанные выше методы не являются легкими для вас, вы можете использовать Kutools for Excel's Выбрать определенные ячейки функцию.

Kutools for Excel включает более 300 удобных инструментов Excel. Бесплатная пробная версия без ограничений в течение 30 дней. Получить сейчас

1. Выберите столбец, в котором вы хотите удалить строки, не содержащие определенного текста, и нажмите Kutools > Выберите Инструменты > Выбрать определенные ячейки. Смотрите скриншот:

документ-удалить-строки-не-содержать-10

2. А в Выбрать определенные ячейки диалог, проверьте Весь рядИ выберите Не содержит, и введите определенный текст в текстовое поле, также вы можете нажать кнопку диапазона в Конкретный тип раздел для выбора ячейки, содержащей определенный текст.

документ-удалить-строки-не-содержать-11

3. Затем нажмите Ok, то выбираются строки, не содержащие определенного текста, щелкните правой кнопкой мыши, чтобы выбрать Удалить из контекстного меню. Смотрите скриншот:

документ-удалить-строки-не-содержать-12

4. Теперь все строки, не содержащие определенного текста в диапазоне, удаляются. Щелкните ее, чтобы получить дополнительную информацию о выборе конкретных ячеек..

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

Способ первый:
Использовать встроенное средство 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-ти шапка), то код будет выглядеть так:

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

    Способ первый:
    Использовать встроенное средство 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-ти шапка), то код будет выглядеть так:

      макрос удалит на листе все строки, в которых содержится искомый текст:

      Чтобы вместо удаления просто скрыть такие строки, замените строку

      Расширенная версия этого макроса - с использованием UserForm для ввода искомого значения



      Ещё один вариант кода, позволяющего выполнять поиск (с последующим удалением или скрытием строк) сразу по нескольким условиям:

      Комментарии

      Подскажите, пожалуйста, какие изменения нужно внести в ваш макрос для скрытия просто пустых строк в диапазоне от 1 до 150 строки.

      А как адаптировать Ваш макрос для ячейки с условием, например удалять строку если в ячейке значение больше, например, нуля?

      уже все работает)

      Не знаю, что вы там делаете, но строка "If ws.Index = 1 Then" явно не из моего макроса
      (в моем макросе нет переменной ws)
      Вот если вы показали бы полный код своего макроса - тогда можно было бы сказать, в чем именно ошибка.

      У меня не удаляет ничего( Что я делаю не правильно?
      удалять только на первом листе, который называется "накладная"
      If ws.Index = 1 Then
      Правильно?

      Спасибо. Все работает как нужно - с Вашей помощью.

      А вы попробуйте сначала удалить нули из ячеек

      А потом удаляйте строки с пустыми ячейками:

      Просмотрел много форумов по удалению строк через макрос. Нашел один который частично подходит мне, он удаляет строки если в 5 столбце пусто во всех листах кроме первого. Но не знаю как добавить, чтоб удалял еще и строки если в 4 столбце значение 0. Код быстрый (без цикла) а как дополнить - ума не приложу.
      Sub DeleteEmptyRowsToAll()
      Application.ScreenUpdating = False ' отключаем обновление экрана
      On Error Resume Next
      Dim ws As Worksheet 'декларирование переменой
      For Each ws In Worksheets
      If ws.Index > 1 Then ' кроме первого листа
      ws.Columns(5).SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' удаляем сразу все строки, в которых в 5-м столбце - пусто
      End If
      Next
      End Sub

      Огромное спасибо за помощь. :)

      Про чёрные ячейки в столбце.
      Файл обновляется несколько раз в день - делать выборку вручную не вариант, нужен макрос.
      А офис 2007 покупать шеф не хочет - 18 компов. Хватит вам и 2003, тем более официальный.
      Про форум - пардон, не так назвал. Извините, если обидел.

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

      PS: Про какой форум речь? У меня на сайте форума нет, и не предвидится в ближайшем будущем.

      Очень хороший форум! Часто им пользуюсь, а вот теперь забуксовал.
      задача: имеется таблица, в которой, например, третий из столбец заполнен по принципу - или черная или белая ячейка. Нужно удалить строки с белыми ячейками в этом столбце. Заранее спасибо!

      Вовсе необязательно вкладывать 3 условия в макрос.
      Я бы на вашем месте в дополнительные столбец поместил формулу типа такой:
      =ЕСЛИ(ИЛИ(Q1<5;НЕ(ЕОШ(НАЙТИ("текст";I1;1)));И(СЧЁТЕСЛИ(L:L;L1)=1;Q1>2));"";"не удаляем")


      И потом бы макросом (или через автофильтр) удалил пустые строки по доп.столбцу

      Добрый день, подскажите как написать макрос для скрытия и открытия (Или удаления) строк таблицы если в диапазоне ячеек [Пример:(d5:g100)] строка содержит в ячейках нули (или формулу, но отображает по формуле ноль)

      Это как раз то что я так долго искал! Большое спасибо за информацию!

      Помогите пожалуйста решить чуть более сложную задачу.
      Есть несколько условий для удаления,
      1) если значение ячейки (числовое) в столбце "Q" меньше "число" - удаляем строку
      2) если значение ячейки (текстовое) в столбце "I" содержит "текст" - удаляем строку
      И самое, наверное сложное:
      3) если значение ячейки (текстовое) в столбце "L" встречается на листе только 1 раз и при этом значение ячейки (числовое) в столбце "Q" больше "число" - удаляем строку

      И как все эти условия правильно в циклы вложить
      PS В файле больше 30000 строк

      Заранее спасибо! С уважением!

      Большое спасибо за помощь! Работает!

      Чтобы обработка ячеек начиналась с 15-строки, надо изменить анализируемый диапазон:

      Т.е. поиск будет производится на пересечении используемого диапазона листа, и диапазона строк с 15-й по последнюю строку листа
      (таким образом мы отсекаем первые 14 строк)

      Кир Булычев, причину такого поведения вашего макроса я не знаю.
      Надо смотреть файл - возможно, проблема в нём.
      И, кстати, для 10000 строк надо использовать другие, более правильные и быстрые, алгоритмы
      (хотя бы потому, что Union работает медленно, и не может вмещать в себя более 1000 ячеек. Т.е. если у вас с нулями и единицами будет 1500 строк, - то удалится только около 1000 строк, остальные макрос пропустит)

      PS: За помощью лучше обращайтесь на форумы по Excel
      (я помогаю не бесплатно)

      Вот пользовался макросом который Вы посоветовали (я заменил только локацию данных):

      For Each cell In Range("O:O").SpecialCells(xlCellTypeConstants)
      If Val(cell) = 0 Or Val(cell) = 1 Then
      If delra Is Nothing Then Set delra = cell Else Set delra = Union(delra, cell)
      End If
      Next cell
      If Not delra Is Nothing Then Intersect(delra.EntireRow, Range("M:O")).Delete
      Intersect(Range("O:O").SpecialCells(xlCellTypeConstants, xlErrors).EntireRow, Range("M:O")).Delete

      - но вот недавно, увеличилось число обрабатываемых данных (со 180 до 380 строк, а будет и до 10 000) и если раньше макрос удалял данные в строках с "М" по "О" если в "О" содержатся "1", "0" или "N/A" и поднимал их вверх (т.е. удалял строки) - то теперь он также удаляет данные НО стирает не строки а 2 соседних столбца справа. При возврате к меньшему кол-ву обрабатываемых ячеек/данных - всё снова работает нормально.
      Решил опять к Вам обратится за помощью т.к. составные этого макроса к сожалению находятся за граню моих познаний в VBA.

      Буду очень благодарен если посоветуете что-нибудь.

      Скажите, пжта, если надо начать рассматривать массив начиная допустим с 15-й строки. Какие изменения претерпит макрос?

      Здравствуйте !
      У меня вопрос по макросу "позволяющему выполнять поиск (с последующим удалением или скрытием строк) сразу по нескольким условиям:"

      Мне нужно чтоб удалялись строки со значением НОЛЬ.
      Ставлю "0" и удаляются все значения в значении которого есть НОЛЬ.

      Как сделать что бы такого не происходила! Сохранив при этом удаление по нескольким условиям.

      А можно как-то сделать так, чтобы этот макрос всегда был включен при заходе в файл Exela и работал динамически. К примеру, если поменяются данные в ячейках C2:CI2, то сразу скроются или отобразяться ячейки согласно макросу.

      Вы правы. Спасибо большое, он работает хорошо! У меня неполучилось потому что я буквы ставил в ячейки, если подставить цифры то все будет работать правильно :)

      Неужели? Плохо проверяли.
      Этому макросу нет разницы, что в ячейках - формулы или значения.

      Sub СкрываемПустыеСтолбцы()
      Dim cell As Range: Application.ScreenUpdating = False
      For Each cell In [c2:ci2].Cells
      ' скрываем столбцы, если в ячейке ноль или пусто
      cell.EntireColumn.Hidden = Val(cell) = 0
      Next cell
      End Sub

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

      Моя задача решена. Спасибо огромное))) В целом - действовала по предложенному Вами плану))) Спасибо!)))))

      В макросе в выражении ra.Find(word, , xlValues , xlPart) есть опция xlValues - она отвечает за поиск В ЗНАЧЕНИЯХ.
      Есть и другие варианты этой опции:
      xlFormulas - поиск в формулах
      xlComments - поиск в комментариях к ячейке

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

      Как бы для меня очень затруднительным получается п.3. ((((

      Т.е. создать бегунок по строкам (нахожу совпадение - копирую) нереально?(((((

      Здравствуйте, Ольга.
      Тут многое зависит от того, насколько "огромный" ваш файл (тысячи, десятки или сотни тысяч, миллион строк?)
      При разных объёмах данных - разные алгоритмы.

      Представленный мной код корректно работает для небольших таблиц (где число скрываемых\удаляемых строк не превышает тысячи)
      Это ограничение легко обойти, но для увеличения производительности необходимо полностью изменить алгоритм макроса
      (что моментально работает на тысячах строк, может нещадно тормозить на миллионе строк)

      Самый простой способ, который приходит мне на ум - с использованием формулы в доп.столбце:
      1) на отдельном листе делаем список из 50 позиций
      2) в дополнительном (пустом) столбце с огромной таблицей пишем формулу, которая проверяет наличие одного из 50 слов в строке
      3) применяем автофильтр в этому доп. столбцу, оставляя видимыми лишь те строки, для которых формула вернула результат "совпадение найдено"
      4) выделяем и копируем видимые строки на другой лист

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

      Буду признательна за любую помощь.
      Спасибо)

      Вам поможет такой макрос:
      (не самый быстрый - но экономить миллисекунды не вижу смысла)

      Читайте также: