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