我是VBA的新手,我正试图想出一种方法来删除所有行(如果可能的话,移动单元格),其中网站列单元格包含单词none
。该表包含5000多条记录,这将为我节省大量时间。
我很感激任何建议。提前谢谢了!
这不是VBA任务 - 使用自动过滤器最简单地解决此特定任务。
1.插入自动过滤器(在Excel 2010中单击主页 - >(编辑)排序和过滤 - >过滤器) 2.过滤“网站”列 3.标记'无'并删除它们 4.清除过滤器
好的我知道这对于VBA但是如果你需要这样做一次性批量删除你可以使用以下Excel功能:http://blog.contextures.com/archives/2010/06/21/fast-way-to-find-and-delete-excel-rows/希望这可以帮助任何人
寻找字符串“paper”的示例:
在“开发人员选项卡”中,转到“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:输入当前文件所包含的行数。
“If”中的数字“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行而不是.Offset(1,0)
中的1。
一般来说,在我做.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