VBA_Offset 对于具有 Header 的列

VBA_Offset for Column with Header

我有一个数据,我根据 header 对列应用了过滤器。现在我想对过滤后的数据进行一些更改,即同一列中的可见单元格。我在下面提到的代码中,过滤器已应用于具有 header“查询类型”的列,它的列字母是“E”。是否可以根据列 header 而不是列字母来放置偏移量?因为列每次都在变化。在下面的示例中,如何动态替换 E2 或 E 以适应带有 header 的列?我尝试用 FiltCol 替换“E”;但是它不起作用。

Sub Filter()

Dim FiltCol As Variant

FiltCol = Rows("1:1").Find(What:="Query Type", LookAt:=xlWhole).Column

ActiveSheet.UsedRange.AutoFilter Field:=FiltCol, Criteria1:="Rejected"

ActiveSheet.Range("E2", Range("E" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).FormulaR1C1 = "Accepted"

End Sub
cells(1,1).offset(2,3)

会让你从 A1 到 D3

lastRow = Cells(105000, FiltCol).End(xlUp).Row    <<< This is poor, see edit below

ActiveSheet.Range(Cells(2, FiltCol).Offset(0, 1), Cells(lastRow, FiltCol).Offset(0, 1)).SpecialCells(xlCellTypeVisible).FormulaR1C1 = "Accepted"

编辑:

最好动态描述最后一行

lastRow = Cells(Cells.Rows.Count, FiltCol).End(xlUp).Row

当要处理列号时,可以使用工作表的.Cells-属性。 Cells 需要 2 个参数,行和列。行始终是一个(长)数字,列可以指定为数字或列字符

以下条款完全相同:

ActiveSheet.Range("D3")
ActiveSheet.Cells(3, 4)       
ActiveSheet.Cells(3, "D")

您的代码可能如下所示

Sub Filter()
    Dim FiltCol As Variant

    With ActiveSheet
        FiltCol = .Rows("1:1").Find(What:="Query Type", LookAt:=xlWhole).Column
        Dim lastRow As Long
        lastRow = .Cells(.Rows.Count, FiltCol).End(xlUp).row
        .UsedRange.AutoFilter Field:=FiltCol, Criteria1:="Rejected"

        Dim visibleCells As Range
        On Error Resume Next    ' Avoid runtime error if nothing is found
        Set visibleCells = .Range(.Cells(2, FiltCol), .Cells(lastRow, FiltCol)).SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
        
        If Not visibleCells Is Nothing Then
            visibleCells.Value2 = "Accepted"
        End If
    End With
End Sub