选择筛选列标题正下方的第一个可见单元格

时间:2015-10-27 19:22:14

标签: excel vba excel-vba

我正在尝试选择过滤列标题正下方的第一个可见单元格。我得到的代码如下,但我不得不使用此代码。首先,第一行代码使用文件的当前活动范围。此文件很可能会更改,此范围将不同。如何使其适用于我将使用它的任何文件?其次,如果我使用具有相同列格式的完全不同的文件,则列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

4 个答案:

答案 0 :(得分:3)

未经测试但是:

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

答案 1 :(得分:2)

我更喜欢非破坏性的方法来确定在过滤操作之后是否有可见的单元格可以使用。由于您使用公式填充J列,因此无法保证列J包含可以使用工作表的SUBTOTAL function计算的任何值(SUBTOTAL不计算过滤器隐藏的行)但是您计划的公式填充到列J引用列K,所以必须有一些东西。

from PyQt4 import QtGui, QtCore
import sys, os

class TestWindow(QtGui.QWidget):

    def __init__(self):
        super(TestWindow, self).__init__()

        self.setGeometry(200,200,800,600)
        self.setWindowTitle('TA Switch Tab')
        self.lbl = QtGui.QTextBrowser(self)
        self.lbl.resize(760,40) # Typically you create a layout and put the widget in the layout.
        self.lbl.move(20,440)

        self._update_timer = QtCore.QTimer()
        self._update_timer.timeout.connect(self.update_label)
        self._update_timer.start(10000) # milliseconds

    def update_label(self):
        with open ("/tmp/py.state.test", "r") as myfile:
            data=myfile.read().replace('\n', '')
        self.lbl.append(data)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    win = TestWindow()
    win.show()
    sys.exit(app.exec_())

Fill Formula to Visible cells

答案 2 :(得分:2)

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

答案 3 :(得分:0)

这样的事可能有用......

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