Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Это не задача VBA. Эта конкретная задача проще всего разрешена с помощью фильтра Auto.

1.Insert Auto filter (В Excel 2010 нажмите на главную → (Редактирование) Сортировка и фильтр → Фильтр)
2. Фильтр в столбце "Веб-сайты"
3. Отметьте "none" и удалите их
4. Очистить фильтр

Ответ 2

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

Пример поиска строки "бумага" :

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

Ответ 3

В вкладке "Разработчик" перейдите в "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" в "If" относится к пятому столбцу (E)

Ответ 4

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

Ответ 5

Об этом было сказано в другом комментарии, но вы могли бы попробовать что-то вроде этого.

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-июля, чтобы UsedRange был прав или изменил смещение на 2 строки вместо 1 в .Offset(1,0).

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

Ответ 6

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

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