【问题标题】:Taking Visible range after AutoFilter自动过滤后取可见范围
【发布时间】:2025-12-02 23:30:01
【问题描述】:

我正在尝试将过滤后的行选择到范围变量 xRange 中。我需要在那个范围内进行一些操作。在过滤之前有 10000+ 行。过滤后是 5000 行。所以在过滤后我尝试了这个来获得过滤后的范围,但它没有按我的预期工作。

With Sheets("FullInvoice").Range("A1:N" & lRow)
    .AutoFilter
    .AutoFilter Field:=6, Criteria1:=">=" & fD, Criteria2:="<=" & lD

End With
Set xRange = Sheets("FullInvoice").Cells.SpecialCells(xlCellTypeVisible)

我在 Set xRange 行添加了一个断点。并尝试了 xRange.rows.count。但即使有 5000 行,它也只返回 1。所以我的目的是在过滤后获取第一个单元格的单元格值。我怎样才能做到这一点。

当我尝试时

dim s as string
s=xRange.Range("A1").value

它返回整行的第一个单元格值。不是来自过滤的行。

那么如何解决这种情况。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    比这更容易。只需将xrange 带入您的With。另外我会使用Range.Cells(x,y) 而不是Range.Range 来获取范围内的单元格:

    With Sheets("FullInvoice").Range("A1:N" & lRow)
        .AutoFilter
        .AutoFilter Field:=6, Criteria1:=">=" & fD, Criteria2:="<=" & lD
        Set xrange = .SpecialCells(xlCellTypeVisible)
    End With
    
    MsgBox xrange.Cells(1, 1)
    

    【讨论】:

      【解决方案2】:

      试试这个代码

          With Sheets("FullInvoice").Range("A1:N" & lrow)
          .AutoFilter
          .AutoFilter Field:=6, Criteria1:=">=" & fd, Criteria2:="<=" & ld
      End With
      
      With Sheets("FullInvoice").Range("A1").CurrentRegion
          Set xRange = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
      End With
      MsgBox xRange.Address
      
      Dim s As String
      s = xRange.Range("A1").Value
      MsgBox s
      

      【讨论】: