【问题标题】:Returning Row number after filter VBA过滤VBA后返回行号
【发布时间】:2019-01-11 11:02:37
【问题描述】:

有什么方法可以在过滤后选择或返回第一个可见单元格的单元格地址?到目前为止,我一直在选择过滤后的第一个可见单元格。

fileSheet.Name = "Test"

With fileSheet
    .Range("A2").Activate
    ActiveWindow.FreezePanes = True
    .Range("A2").AutoFilter field:=4, Criteria1:=">1"
    'select the first visible cell after column header
End With

我实际上有列标题。

【问题讨论】:

    标签: vba excel


    【解决方案1】:
    dim firstCell as Range
    set firstCell = fileSheet.usedRange.offset(1,0).SpecialCells(xlCellTypeVisible)(1)
    

    UsedRange 返回正在使用的工作表的范围(好吧,有时太多,但在这种情况下没关系),offset(1, 0) 向下移动一行以便忽略标题行,SpecialCells(xlCellTypeVisible) 得到一个所有可见单元格的列表,因此最后一个 (1) 返回第一个可见单元格。

    【讨论】:

      【解决方案2】:

      试试这个

      lastrow=cells(rows.count,"A").end(xlup).row 
        For x=1 To lastrow 
          If cells(x,"A")=criteria1 Then 
             rowfound=x 
           endif 
         Next x 
      

      在开始时使变量变暗

      【讨论】:

      • 其他 2 个答案更容易(更好)。这只是一种选择。
      【解决方案3】:

      给定范围为A1,这将为您提供第一个可见单元格:

      Range("A1").Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row
      
      1. 偏移量将跳过标题行
      2. SpecialCells 会将控制移至可见单元格。
      3. 从可见单元格中选择第一个项目。
      4. 查找行

      【讨论】:

      • .Offset 返回Method or data member not found 错误。
      • @ramedju,这是一个错字,已修复。
      • 对我来说,每次行号返回为 1。我的 excel 从第 2 行过滤,即 A2,应用过滤器后的第一个可见行是 A183。但是当我使用上面的公式时,我得到的行号为 1。 Dim FR As Long FR = Range("A2").Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row
      【解决方案4】:

      如果你想在过滤后选择第一行,这里有一个代码,我已经尝试过了

      代码:

      activesheet.AutoFilter.Range.offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 2).select
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 2020-06-28
        • 1970-01-01
        相关资源
        最近更新 更多