Удалить всю строку, если ячейка содержит строку X

Я новичок в VBA, и я пытаюсь придумать способ удалить все строки (и сдвинуть ячейки вверх, если это возможно), где ячейка столбца веб-сайта содержит слово none. Таблица содержит 5000 + записей, и это сэкономит мне много времени.

Я ценю любые предложения. Большое спасибо заранее!

http://i39.tinypic.com/5ano1d.png

6 ответов


Это не задача на VBA - это конкретная задача простой sollowed с автоматическим фильтром.

1.Вставить автофильтр (в Excel 2010 нажмите главная - > (редактирование) сортировка и фильтр - > фильтр)
2. Фильтр в столбце "веб-сайты"
3. Отметьте " нет " и удалите их
4. Очистить фильтр


Ok Я знаю это для VBA, но если вам нужно сделать это для одноразового массового удаления, вы можете использовать следующие функции Excel: http://blog.contextures.com/archives/2010/06/21/fast-way-to-find-and-delete-excel-rows/ Надеюсь, это поможет кому-нибудь

пример поиска строки "paper":

  1. в диалоговом окне найти и заменить введите "бумага" в поле найти что.
  2. нажмите Найти все, чтобы увидеть список ячеек с "бумага"
  3. выберите элемент в списке и нажмите Ctrl+A, чтобы выбрать весь список и выбрать все" бумажные " ячейки на листе.
  4. на вкладке Главная ленты нажмите кнопку Удалить, а затем нажмите кнопку удалить строки листа.

на вкладке " разработчик "перейдите в" Visual Basic " и создайте модуль. Скопируйте вставить следующее. Помните об изменении кода, в зависимости от того, что вы хотите. Затем запустите модуль.

  Sub sbDelete_Rows_IF_Cell_Contains_String_Text_Value()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 390
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 5).Value = "none" Then
            Rows(iCntr).Delete
        End If
    Next
    End Sub

lRow : число строк текущего файла.

число "5" в графе "если" обозначает пятый столбец (E)


Я хотел бы добавить к ответу @MBK. Хотя я нашел ответ @MBK очень полезным в решении аналогичной проблемы, было бы лучше, если бы @MBK включил скриншот того, как фильтровать определенный столбец.enter image description here


Это было упомянуто в другом комментарии, но вы можете попробовать что-то вроде этого.

Sub FilterAndDelete()

Application.DisplayAlerts = False 

     With Sheet1 'Change this to your sheet name

         .AutoFilterMode = False   
         .Range("A3:K3").AutoFilter
         .Range("A3:K3").AutoFilter Field:=5, Criteria1:="none"
         .UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete 

     End With

Application.DisplayAlerts = True

End Sub

Я не тестировал это, и это из памяти, поэтому может потребоваться некоторая настройка, но она должна выполнить работу без цикла через тысячи строк. Вам нужно будет удалить 11-Jul так, что UsedRange правильно или измените смещение на 2 строки вместо 1 в .Offset(1,0).

вообще, прежде чем я делаю .Delete Я буду запускать макрос с .Select вместо Удалить таким образом, я могу быть уверен, что правильный диапазон будет удален, что, возможно, стоит сделать, чтобы проверить, чтобы убедиться, что соответствующий диапазон удаляется.


попробуйте это ...

Dim r as Range
Dim x as Integer

For x = 5000 to 4 step -1 '---> or change as you want //Thanx 4 KazJaw

  set r = range("E" & format(x))
  if ucase(r.Value) = "NONE" then
    Rows(x).EntireRow.Delete
  end if 

Next