VBA中的条件删除

时间:2016-02-16 17:09:47

标签: excel vba excel-vba

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

我找到了以下

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列中的所有单元格并删除相应的行。上面的代码仅适用于A1。

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

基本上,你的循环遍历从{A1}辐射出的Range.CurrentRegion property中的每个单元格。您的叙述表示您只想检查A列但删除Range.EntireRow property

Scott Craner提出的For .. Next向后循环可能是你最好的选择,但如果你对For ... Each 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

答案 2 :(得分:-2)

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

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