VBA循环遍历列以将每个单元格与变量进行比较,如果它不匹配则删除该行

时间:2017-04-20 21:27:55

标签: excel vba excel-vba

我目前正在尝试创建一个循环,从第5行开始查看C列并比较该列中的每个单元格,直到它到达该列中最后一个使用过的单元格。 将针对8个变量检查​​每个单元格以查看它是否匹配。如果单元格与任何变量都不匹配,则必须删除整行。

我目前的尝试如下:

Dim AC as long
Dim LastRow as long
AC=5
LastRow= Activesheet.range("A" & Rows.count).end(xlup).row
For AC = 5 To LastRow
            With Cells(AC, "C")
            Do Until Cells(AC, "C").Text = OC1 Or Cells(AC, "C").Text = OC2 Or Cells(AC, "C").Text = OC3 Or Cells(AC, "C").Text = OC4 Or Cells(AC, "C").Text = NC1 Or Cells(AC, "C").Text = NC2 Or Cells(AC, "C").Text = NC3 Or Cells(AC, "C").Text = NC4
                Rows(AC).EntireRow.Delete
            Loop
        End With
    Next AC

这应该确保一旦删除了一行,就会占用它的新行(例如,删除整行5将导致第6行成为第5行)所以它应该在那里退出Do循环是一个匹配,抓住下一个行号并重复,直到有另一个匹配。只有代码不断抛出执行中断错误。有人可以告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

如果您的代码导致无限循环,并且只在您尝试终止无限循环时生成错误,则可以使用以下代码:

if let content = json .object(forKey: "books") as? [[String:Any]]
    for contentDic in content {
            print(contentDic)
    }
}

您当前正在做的事情的问题是,一旦您接近NSDictionary / NSArray(假设您已删除任何早期的行),您正在查看空白行,因此无限删除它们。

或者,当然,您可以使用更普遍接受的删除行的方式 - 从底部开始并向上工作:

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Dim AC As Long
Dim LastRow As Long
AC = 5
LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
Do While AC <= LastRow
    If Cells(AC, "C").Text <> OC1 And _
       Cells(AC, "C").Text <> OC2 And _
       Cells(AC, "C").Text <> OC3 And _
       Cells(AC, "C").Text <> OC4 And _
       Cells(AC, "C").Text <> NC1 And _
       Cells(AC, "C").Text <> NC2 And _
       Cells(AC, "C").Text <> NC3 And _
       Cells(AC, "C").Text <> NC4 Then
        Rows(AC).Delete
        LastRow = LastRow - 1
    Else
        AC = AC + 1
    End If
Loop

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic