Select 过滤大量数据中的下一个单元格 - VBA

Select next cell in filtered large amount of data - VBA

我一直在编写一个代码,该代码将过滤所有 "No" 的列 CF,然后查看 "No" 右侧的单元格以查看列出的数字是否为“2 ”。如果数字是“2”,那么它将用“1 2 3”替换 D 列中单元格的内容。

到目前为止代码正在为此目的工作,但我不知道如何让它转到 CF 列中的下一个 "No" 函数并为所有 "No" 重复代码。我正在处理 50,000 多行数据,所以每次我尝试 运行 一个 .offset 函数来查找下一个可见单元格时,它都会崩溃。

关于循环到 运行 函数以便它跳转到自动过滤器中可见的下一个 "No" 有价值的东西有什么想法吗?

非常感谢。

Sub CorrectMealSwap()

ActiveSheet.Range("$CF").AutoFilter Field:=1, Criteria1:="No"
    With Worksheets("Worksheet_1").AutoFilter.Range
        Range("CF" & .Offset(1, 0).SpecialCells(xlCellTypeVisible_ 
        (1).Row).Select
    End With
    If ActiveCell.Offset(0, 1) = "2" Then
    ActiveCell.Offset(0, -80).Select
    ActiveCell.Value = "1 2 3"
    End If

 End Sub

您可以通过在 CG 列上应用另一个过滤器来避免循环过滤单元格

Sub CorrectMealSwap()
    With ActiveSheet 
        With .Range("CG1", .Cells(.Rows.Count, "CF").End(xlUp)) 'reference referenced sheet columns CF:CG cells from row 1 (header) down to last not empty row of column CF
            .AutoFilter Field:=1, Criteria1:="No" 'filter on referenced range 1st column with "No"
            .AutoFilter Field:=2, Criteria1:="2" 'filter on referenced range 2nd column with "2"
            If Application.WorksheetFunction.Subtotal(103, .Columns(1)) > 1 Then .Resize(.Rows.Count - 1, 1).Offset(1, -80).SpecialCells(xlCellTypeVisible).Value = "1 2 3" ' if any filtered cell other than header then write "a 2 3" in corresponding column D cells 
        End With
        .AutoFilterMode = False
    End With
 End Sub