Удалить целую строку, если ячейка содержит строку X
Я новичок в VBA и пытаюсь найти способ удалить все строки (и сместить ячейки вверх, если это возможно), где ячейка столбца веб-сайта содержит слово none
. Таблица содержит записи 5000+, и это сэкономит мне много времени.
Я ценю любые предложения. Заранее большое спасибо!
Ответы
Ответ 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