VBA未循环过滤的行

时间:2018-02-13 18:16:22

标签: vba excel-vba excel

我有一个自动执行某些流程的大型Excel文件。今天,我认为其中一个列存在问题,我需要修复它。为了解决这个问题,我在下面生成了此代码,以过滤列N以显示所有' #N / A'。对于已过滤的行,我想检查并查看右侧2列的偏移是否具有值"可用"。如果是这样,我想循环遍历所有列N并替换' #N / A'与'未知'。但是我生成的代码仅适用于第一个已过滤的单元格,并且不会循环。

Sub tess()
ActiveSheet.Range("$C$1:$AR$468").AutoFilter Field:=12, Criteria1:="#N/A"

ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(, 12).Select

Dim lr
lr = ActiveSheet.UsedRange.Rows.CountLarge

For Each cell In Range("n1:n" & lr)
If ActiveCell.Value = CVErr(xlErrNA) And ActiveCell.Offset(, 2).Value = "Available" Then

  ActiveCell.Value = "Unkown Person"

  End If
Next cell

End Sub

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以通过添加其他过滤器来避免循环:

Sub tess()
    With ActiveSheet.Range("$C$1:$AR$468")
        .AutoFilter Field:=12, Criteria1:="#N/A"
        .AutoFilter Field:=14, Criteria1:="Available"
        If Application.WorksheetFunction.Subtotal(103, .Columns(12)) > 1 Then .Offset(1, 11).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible).Value = "Unkown Person"
        .Parent.AutoFilterMode = False
    End With
End Sub

答案 1 :(得分:1)

您应该在For循环中引用“cell”,而不是“ActiveCell”。