簡體   English   中英

選擇篩選列標題正下方的第一個可見單元格

[英]Select first visible cell directly beneath the header of a filtered column

我試圖選擇過濾列標題正下方的第一個可見單元格。 我得到的代碼如下,但我不得不使用此代碼。 首先,第一行代碼使用文件的當前活動范圍。 此文件很可能會更改,此范圍將不同。 如何使其適用於我將使用它的任何文件? 其次,如果我使用具有相同列格式的完全不同的文件,則列J下的第一個可見單元格可以是J210。 如何使這個變量適用於任何變量數組?

Sub Macro16()
'
' Macro16 Macro
'

'
    ActiveSheet.Range("$A$1:$R$58418").AutoFilter Field:=12, Criteria1:= _
        "Sheets"
    Range("J2").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(RC[1],3)"
    Selection.FillDown
End Sub

未經測試但是:

Sub Macro16()

    With ActiveSheet.Range("A1").CurrentRegion
        .AutoFilter field:=12, Criteria1:="Sheets"
        If .Columns(1).SpecialCells(xlCellTypeVisible).count > 1 Then
            With .Columns(10)
                .Resize(.rows.count - 1).offset(1).SpecialCells(xlCellTypeVisible).FormulaR1C1 = "=RIGHT(RC[1],3)"
            End With
        End If
    End With

End Sub

我更喜歡非破壞性的方法來確定在過濾操作之后是否有可見的單元格可以使用。 由於您使用公式填充J列,因此無法保證列J包含可以使用工作表的SUBTOTAL函數計算的任何值(SUBTOTAL不計算過濾器隱藏的行)但是您計划填充的公式列J引用了列K,所以必須有一些東西。

Sub Macro16()
    With ActiveSheet
        If .AutoFilterMode Then .AutoFilterMode = False
        With .Cells(1, 1).CurrentRegion
            .Columns(12).AutoFilter Field:=1, Criteria1:="Sheets"
            With .Resize(.Rows.Count - 1, 1).Offset(1, 9)
                If CBool(Application.Subtotal(103, .Offset(0, 1))) Then
                    .SpecialCells(xlCellTypeVisible).FormulaR1C1 = "=RIGHT(RC[1],3)"
                End If
            End With
            .Columns(12).AutoFilter Field:=1
        End With
    End With
End Sub

將配方填充到可見細胞

Sub FirstVisibleCell()
    With Worksheets("You Sheet Name").AutoFilter.Range
       Range("A" & .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row).Select
    End With
End Sub

像這樣的東西可能會起作用......

Sub Macro16()

    Dim ARow As Long, JRow As Long, ws1 As Worksheet
    ws1 = Sheets("NAME OF SHEET WITH DATA")
    ARow = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row + 1
    ws1.Range("$A$1:$R$" & ARow).AutoFilter Field:=12, Criteria1:="Sheets"
    JRow = ws1.Range("J" & ws1.Rows.Count).End(xlUp).Row + 1
    ws1.Range("J" & JRow).FormulaR1C1 = "=RIGHT(RC[1],3)"
    ws1.Range("J" & JRow).FillDown
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM