select过滤列的标题正下方的第一个可见单元格

我试图select直接在过滤列标题下的第一个可见单元格。 我得到的代码如下,但我必须对这个代码的问题。 首先,第一行代码使用文件的当前活动范围。 这个文件很可能会改变,这个范围将不会相同。 我怎样才能使它工作的任何文件,我会用它呢? 其次,如果我使用具有相同列格式的完全不同的文件,J列下的第一个可见单元格可以是J210。 我怎样才能使这个工作的任何variables数组?

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 

未经testing,但:

 Sub Macro16() ' ' Macro16 Macro ' ' 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 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 
 Sub FirstVisibleCell() With Worksheets("You Sheet Name").AutoFilter.Range Range("A" & .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row).Select End With End Sub