Excel vba удалить отфильтрованные строки
Предположу, что почти каждый сталкивался с ситуацией, когда необходимо удалить только определенные строки: имеется большая таблица и необходимо удалить из неё только те строки, которые содержат какое-то слово (цифру, фразу). Для выполнения подобной задачи можно воспользоваться несколькими способами.
Способ первый:
Использовать встроенное средство 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" заменить на "Соответствия". Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.Sub Del_Array_SubStr() Dim sSubStr As String 'искомое слово или фраза Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 'заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value 'Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With 'удаляем Dim rr As Range For lr = 1 To UBound(avArr, 1) sSubStr = avArr(lr, 1) For li = 1 To lLastRow 'цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li DoEvents Next lr If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub
Чтобы код выше удалял строки не по точному совпадению слов, а по частичному(например, в ячейке записано "Привет, как дела?", а в списке есть слово "привет" - надо удалить, т.к. есть слово "привет"), то надо строку:
If CStr(arr(li, 1)) = sSubStr Then
заменить на такую:
If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then
УДАЛЕНИЕ ИЗ ЛИСТА СТРОК, КОТОРЫХ НЕТ В СПИСКЕ ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
Т.к. в последнее время стало поступать все больше и больше вопросов как не удалять значения по списку, а наоборот - оставить в таблице только те значения, которые перечислены в списке - решил дополнить статью и таким кодом.
Значения, которые необходимо оставить перечисляются на листе с именем "Лист2". Т.е. указав на "Лист2" в столбце А(начиная с первой строки) несколько значений - после работы кода на листе будут оставлены только те строки, в которых присутствует хоть одно из перечисленных в списке значений. Если лист называется иначе(скажем "Соответствия") в коде необходимо будет "Лист2" заменить на "Соответствия". Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.
В отличие от приведенных выше кодов, данный код ориентирован на то, что значения в списке указаны не полностью. Т.е. если необходимо оставить только те ячейки, в которых встречается слово "активы", то в списке надо указать только это слово. В этом случае если в ячейке будет записана фраза "Нематериальные активы" или "Активы сторонние" - эти ячейки не будут удалены, т.к. в них встречается слово "активы". Регистр букв при этом неважен.'процедура оставляет в листе только те значения, которые перечислены в списке Sub LeaveOnlyFoundInArray() Dim sSubStr As String 'искомое слово или фраза Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr Dim IsFind As Boolean lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 'заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value 'Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With 'удаляем Dim rr As Range For li = 1 To lLastRow 'цикл с первой строки таблицы до конца IsFind = False For lr = 1 To UBound(avArr, 1) 'цикл по списку значений на удаление sSubStr = avArr(lr, 1) If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then IsFind = True End If DoEvents Next lr 'если значение таблицы не найдено в списке - удаляем строку If Not IsFind Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub
Чтобы код выше сравнивал значения таблицы со значениями списка по точному совпадению слов, а не по частичному, то надо строку:
Пустые строки и столбцы могут быть головной болью в таблицах во многих случаях. Стандартные функции сортировки, фильтрации, подведения итогов, создания сводных таблиц и т.д. воспринимают пустые строки и столбцы как разрыв таблицы, не подхватывая данные, расположенные за ними далее. Если таких разрывов много, то удалять их вручную может оказаться весьма затратно, а удалить сразу всех "оптом", используя фильтрацию не получится, т.к. фильтр тоже будет «спотыкаться» на разрывах.
Давайте рассмотрим несколько способов решения этой задачи.
Способ 1. Поиск пустых ячеек
Это, может, и не самый удобный, но точно самый простой способ вполне достойный упоминания.
Предположим, что мы имеем дело вот с такой таблицей, содержащей внутри множество пустых строк и столбцов (для наглядности выделены цветом):
Допустим, мы уверены, что в первом столбце нашей таблицы (колонка B) всегда обязательно присутствует название какого-либо города. Тогда пустые ячейки в этой колонке будут признаком ненужных пустых строк. Чтобы быстро их все удалить делаем следующее:
- Выделяем диапазон с городами (B2:B26)
- Нажимаем клавишу F5 и затем кнопку Выделить (Go to Special) или выбираем на вкладке Главная - Найти и выделить - Выделить группу ячеек (Home - Find&Select - Go to special) .
- В открывшемся окне выбираем опцию Пустые ячейки (Blanks) и жмём ОК – должны выделиться все пустые ячейки в первом столбце нашей таблицы.
- Теперь выбираем на вкладке Главная команду Удалить - Удалить строки с листа (Delete - Delete rows) или жмём сочетание клавиш Ctrl + минус - и наша задача решена.
Само-собой, от пустых столбцов можно избавиться совершенно аналогично, взяв за основу шапку таблицы.
Способ 2. Поиск незаполненных строк
Как вы, возможно, уже сообразили, предыдущий способ сработает только в том случае, если в наших данных обязательно присутствую полностью заполненные строки и столбцы, за которые можно зацепиться при поиске пустых ячеек. Но что, если такой уверенности нет, и в данных могут содержаться и пустые ячейки в том числе?
Взгляните, например, на следующую таблицу - как раз такой случай:
Здесь подход будет чуть похитрее:
-
Введём в ячейку A2 функцию СЧЁТЗ (COUNTA) , которая вычислит количество заполненных ячеек в строке правее и скопируем эту формулу вниз на всю таблицу:
К сожалению, со столбцами такой трюк уже не проделать – фильтровать по столбцам Excel пока не научился.
Способ 3. Макрос удаления всех пустых строк и столбцов на листе
Для автоматизации подобной задачи можно использовать и простой макрос. Нажмите сочетание клавиш Alt + F11 или выберите на вкладке Разработчик - Visual Basic (Developer - Visual Basic Editor) . Если вкладки Разработчик не видно, то можно включить ее через Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) .
В открывшемся окне редактора Visual Basic выберите команду меню Insert - Module и в появившийся пустой модуль скопируйте и вставьте следующие строки:
Закройте редактор и вернитесь в Excel.
Теперь нажмите сочетание Alt + F8 или кнопку Макросы на вкладке Разработчик. В открывшемся окне будут перечислены все доступные вам в данный момент для запуска макросы, в том числе только что созданный макрос DeleteEmpty. Выберите его и нажмите кнопку Выполнить (Run) - все пустые строки и столбцы на листе будут мгновенно удалены.
Способ 4. Запрос Power Query
Ещё один способ решить нашу задачу и весьма частый сценарий - это удаление пустых строк и столбцов в Power Query.
Сначала давайте загрузим нашу таблицу в редактор запросов Power Query. Можно конвертировать её в динамическую "умную" сочетанием клавиш Ctrl+T или же просто выделить наш диапазон данных и дать ему имя (например Данные) в строке формул, преобразовав в именованный:
Теперь используем команду Данные - Получить данные - Из таблицы/диапазона (Data - Get Data - From table/range) и грузим всё в Power Query:
Дальше всё просто:
- Удаляем пустые строки командой Главная - Сократить строки - Удалить строки - Удалить пустые строки (Home - Remove Rows - Remove empty rows).
- Щёлкаем правой кнопкой мыши по заголовку первого столбца Город и выбираем в контекстном меню команду Отменить свёртывание других столбцов (Unpivot Other Columns). Наша таблица будет, как это технически правильно называется, нормализована - преобразована в три столбца: город, месяц и значение с пересечения города и месяца из исходной таблицы. Особенность этой операции в Power Query в том, что она пропускает в исходных данных пустые ячейки, что нам и требуется:
Как отфильтровать список и удалить остальные скрытые или видимые строки в Excel?
Для отфильтрованного списка вам может потребоваться удалить скрытые или видимые строки, чтобы сохранить только полезные данные. В этой статье мы покажем вам способы удаления оставшихся скрытых или видимых строк отфильтрованного списка в Excel.
Удалить скрытые строки на активном листе с кодом VBA
В этом разделе будет показан код VBA для удаления скрытых строк на активном листе. Пожалуйста, сделайте следующее.
1. Активируйте рабочий лист, который вам нужен для удаления скрытых строк, нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.
2. В окне Microsoft Visual Basic для приложений щелкните Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.
Код VBA: удалить скрытые строки
3. нажмите F5 ключ для запуска кода. Если на активном листе есть скрытые строки, после запуска кода появится диалоговое окно, в котором будет указано, сколько скрытых строк было удалено. Щелкните значок OK кнопку, чтобы удалить скрытые строки. Смотрите скриншот:
В противном случае после запуска кода вы получите следующее диалоговое окно.
Внимание: приведенный выше код VBA не только может удалять скрытые строки отфильтрованного списка, но также удалять скрытые строки, которые вы ранее скрывали вручную.
Удалить видимые строки отфильтрованного списка с выделением всех видимых ячеек.
Чтобы удалить видимые строки отфильтрованного списка, сделайте следующее.
1. Выберите все отфильтрованные строки и нажмите F5 , чтобы открыть Перейти к диалоговое окно, затем щелкните Особый кнопка. Смотрите скриншот:
2. в Перейти к специальному диалоговое окно, проверьте Только видимые ячейки вариант, а затем щелкните OK кнопку.
3. Теперь все видимые строки выделены, щелкните выделение правой кнопкой мыши и затем щелкните Удалить строки.
До сих пор все видимые строки удаляются из отфильтрованного списка.
Легко удаляйте скрытые или видимые строки отфильтрованного списка с помощью Kutools for Excel
Вышеупомянутые два метода могут не быть желанными решениями для многих пользователей Excel, здесь мы представляем вам удобный инструмент. Для Удалить скрытые (видимые) строки и столбцы полезности Kutools for Excel, вы можете легко удалить скрытые строки в выбранном диапазоне / листах, активном листе или всех листах в Excel.
Перед применением Kutools for Excel, Пожалуйста, сначала скачайте и установите.
1. Если вы хотите удалить только скрытые или видимые строки отфильтрованного списка, выберите отфильтрованный диапазон вручную, а затем нажмите Кутулс > Удалить > Удалить скрытые (видимые) строки и столбцы. Смотрите скриншот:
2. в Удалить скрытые (видимые) строки и столбец диалоговое окно, оставьте В выбранном диапазоне выбранный в Заглянуть раскрывающийся список (вы можете выбрать другие варианты по своему усмотрению), отметьте Ряды вариант в Удалить тип раздел, а в Подробный тип раздел, проверка Видимые строки or Скрытые строки вариант как вам нужно. И, наконец, нажмите кнопку OK кнопку.
3. Затем появится диалоговое окно, в котором указано, сколько строк было удалено. Щелкните значок OK кнопку.
Если вы хотите получить бесплатную (30-дневную) пробную версию этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Как быстро удалить каждую вторую строку в Excel?
Если вы хотите быстро удалить каждую вторую строку или столбец в Excel, главное, как вы можете сначала быстро выбрать каждую вторую строку или столбец, а затем применить к ним операцию удаления. И эта статья покажет вам некоторые хитрости о том, как сначала выбрать каждую вторую строку или столбец, а затем быстро их удалить.
Удалите все остальные строки в Excel с помощью команды фильтра
Microsoft Excel Фильтр может помочь вам быстро отфильтровать все остальные строки, а затем сразу удалить их, пожалуйста, сделайте следующее:
1. В пустом столбце помимо исходных данных введите 0,1,0,1…, 0,1. В этом случае мы вводим числа во вспомогательный столбец C. См. Следующий снимок экрана:
2. Выберите столбец C и щелкните значок Фильтр под Данные таб. Затем нажмите кнопку со стрелкой рядом с C1 и проверьте только 0 под Выбрать все вариант. Смотрите скриншот:
3. Тогда все строки с 1 скрыты. Выберите видимые строки с 0 и нажмите кнопку Главная > Удалить > Удалить строки листа чтобы удалить эти строки. Затем он удаляет все остальные строки, и вам нужно нажать Фильтр еще раз, чтобы отобразить только строки с 1. См. скриншоты:
4. Наконец, вы можете удалить вспомогательный столбец C по мере необходимости.
Выделите каждую вторую или n-ю строку, столбец и сразу удалите их
Kutools for Excel's Выберите интервальные строки и столбцы Утилита может помочь вам найти и выбрать каждую вторую или n-ю строку или столбец, а затем вы можете выполнять некоторые операции по мере необходимости. Нажмите, чтобы загрузить Kutools for Excel!
Удалите каждую вторую строку в Excel с кодом VBA
Собственно, макрос VBA - тоже хороший выбор для решения этой проблемы.
1. Удерживая нажатой другой + F11 ключи в Excel, и он открывает Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модули, и вставьте следующий макрос в Модули Окно.
Код VBA: удалить каждую вторую строку в выделении:
3. Нажмите F5 ключ для запуска этого макроса. Затем появляется диалоговое окно для выбора диапазона. Смотрите скриншот:
4. Затем нажмите OK, каждая вторая строка в выбранном диапазоне из второй строки удаляется сразу, см. снимок экрана:
Удалите каждую вторую строку или столбец в Excel с помощью Kutools for Excel
Для начинающего пользователя Microsoft Excel использование макроса VBA немного сложно. В Выберите интервальные строки и столбцы полезности Kutools for Excel может помочь вам быстро удалить все остальные строки.
После установки Kutools for Excel, пожалуйста, сделайте следующее:
1. Выберите диапазон, в котором вы хотите удалить все остальные строки, а затем примените эту утилиту, щелкнув значок Кутулс > Выберите > Выберите интервальные строки и столбцы….
2. В Выберите интервальные строки и столбцы диалоговом окне, укажите настройки, как показано на следующем снимке экрана, и нажмите OK кнопку, чтобы сначала выбрать все остальные строки.
3. Затем выбирается и выделяется каждая вторая строка в выделении. Смотрите скриншот:
4. Затем вы можете быстро удалить выбранные каждые остальные строки, нажав кнопку Главная > Удалить > Удалить строки листа чтобы удалить все эти строки. Смотрите скриншоты:
С помощью этой функции вы также можете удалить каждые n строк или столбцов по мере необходимости.
Демо: удалите каждую вторую строку или столбец с помощью Kutools for Excel
Kutools for Excel: с более чем 300 удобными надстройками Excel, которые можно попробовать бесплатно без ограничений в течение 30 дней. Загрузите и бесплатную пробную версию прямо сейчас!
Возможно, вам не составит труда удалить строки, не соответствующие критериям на одном листе, но знаете ли вы какие-либо способы удаления строк, не соответствующих критериям на другом листе, как показано ниже. Теперь у меня есть две хитрости, которые помогут вам быстро решить эту проблему.
Критерии (в листе 2) До (Лист 1) После (Лист1)
Вкладка Office позволяет редактировать и просматривать в Office с вкладками и значительно упрощает работу .
- Повторное использование чего угодно: Добавляйте наиболее часто используемые или сложные формулы, диаграммы и все остальное в избранное и быстро используйте их в будущем.
- Более 20 текстовых функций: Извлечь число из текстовой строки; Извлечь или удалить часть текстов; Преобразование чисел и валют в английские слова.
- Инструменты слияния : Несколько книг и листов в одну; Объединить несколько ячеек / строк / столбцов без потери данных; Объедините повторяющиеся строки и сумму.
- Разделить инструменты : Разделение данных на несколько листов в зависимости от ценности; Из одной книги в несколько файлов Excel, PDF или CSV; От одного столбца к нескольким столбцам.
- Вставить пропуск Скрытые / отфильтрованные строки; Подсчет и сумма по цвету фона ; Отправляйте персонализированные электронные письма нескольким получателям массово.
- Суперфильтр: Создавайте расширенные схемы фильтров и применяйте их к любым листам; Сортировать по неделям, дням, периодичности и др .; Фильтр жирным шрифтом, формулы, комментарий .
- Более 300 мощных функций; Работает с Office 2007-2019 и 365; Поддерживает все языки; Простое развертывание на вашем предприятии или в организации.
Удалите строки, не соответствующие критериям на другом листе, с помощью VBA
Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!
Код VBA может помочь вам удалить строки, не соответствующие критериям на другом листе.
1. Нажмите Alt + F11 для отображения Microsoft Visual Basic для приложений окно.
2. В окне нажмите Вставить > Модули чтобы отобразить новое окно модуля, затем скопируйте следующий код VBA в окно модуля.
VBA: удалить строки, не соответствующие критериям, на другом листе в Excel.
3. Нажмите Run, чтобы KutoolsforExcel Появится диалоговое окно, в котором вы можете выбрать диапазон, в котором вы хотите удалить строки, не соответствующие критериям. Смотрите скриншот:
4. Нажмите OK, и появится другое диалоговое окно для выбора критериев на другом листе, см. снимок экрана:
5. Теперь все строки, не соответствующие критериям на другом листе, удаляются.
Удалите строки, не соответствующие критериям на другом листе, с помощью Kutools for Excel
Если код VBA для вас немного сложен, вы можете попробовать Kutools for Excel's Compare Ranges.
Kutools for Excel включает более 300 удобных инструментов Excel. Бесплатная пробная версия без ограничений в течение 30 дней. Получить сейчас
1. Выберите лист, на котором вы хотите удалить строки, не соответствующие критериям. И нажмите Кутулс > Сравнить диапазоны. Смотрите скриншот:
2. в Сравнить диапазоны диалоговом окне нажмите кнопку в Диапазон B, а затем вы можете выбрать нужный вам диапазон критериев. Смотрите скриншот:
3. Затем нажмите OK, затем вернемся к Сравнить диапазоны диалог, проверьте Другое значение и Выбрать целые строки. Смотрите скриншот:
4. Нажмите Ok, и выйдите из Сравнить диапазоны диалог. Затем вы видите, что выбираются строки значений, которые отличаются от критериев.
5. Щелкните правой кнопкой мыши, чтобы щелкнуть Удалить из контекстного меню, чтобы удалить строки, не соответствующие критериям на другом листе.
Читайте также:
- Что такое базовая система ввода вывода bios и в каком разделе памяти она размещается
- Не отправляйте устаревший код javascript в современные браузеры
- Комплекс компьютерных программ предоставляющих пользователям не владеющим языками программирования
- 1с получить общий макет
- Как удалить варфейс с компьютера полностью