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
我一直在编写一个代码,该代码将过滤所有 "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