在VBA中进行条件删除

我正在拼凑代码,使我的macros正常工作。 这种方法在过去使用得很好,但我似乎无法正确地调整任何代码。

我发现以下

Sub way() Dim Cell As Range For Each Cell In Range("A1").CurrentRegion If Len(Cell) < 2 Then Cell.EntireRow.Delete Next Cell End Sub 

我可以根据自己的喜好调整If Len(Cell)标准。 例如= 10

我不知道如何调整代码,使其通过A列中的所有单元格进行search并删除相应的行。 上面的代码只适用于A1。

理想情况下,我想删除列A中具有10个字符长度的单元格的所有行。 或者,也可以使用完全不同的代码集,删除不包含列A中长度为10个字符的单元格的所有其他行。

删除行时,最好向后循环:

 Sub way() Dim ws As Worksheet Dim i As Long Dim lastrow As Long Set ws = ActiveSheet lastrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row For i = lastrow To 1 Step -1 If Len(ws.Cells(i, 1)) < 2 Then ws.Rows(i).Delete Next i End Sub 

本质上,你的循环正在经历从A1 放射出的Range.CurrentRegion属性中的每个单元格。 你的叙述表示,你只想检查列A,但删除Range.EntireRow属性 。

对于斯科特·克雷纳 ( Scott Craner )提出的下一步回退步骤可能是你最好的select,但是如果你对一个For …每个In循环更加适应,那么你可以进行调整。

 Sub way() Dim cl As Range, dels As Range With Worksheets("Sheet1") For Each cl In .Range("A1").CurrentRegion.Columns(1).Cells If Len(cl.Value2) = 10 Then If Not dels Is Nothing Then Set dels = Union(dels, cl) Else Set dels = cl End If End If Next cl End With If Not dels Is Nothing Then _ dels.EntireRow.Delete End Sub 

删除列A中没有值的行的逻辑是10个字符,符号或数字长度将是If Len(cl.Value2) <> 10 Then

我没有检查语法,但这样的事情应该工作:

 dim idx as integer idx = 1 while Range("A" + cstr(idx)).value <> "" 'insert your delete logic here... idx = idx + 1 wend