在AutoFilter之后取可见范围

时间:2018-03-02 07:51:40

标签: excel vba excel-vba

我试图将过滤的行选择到范围变量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。但它刚刚返回1即使有5000行。那么我的目的是在过滤后获取第一个单元格的单元格值。我怎样才能做到这一点。

当我尝试

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

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

那么如何解决这种情况。

2 个答案:

答案 0 :(得分:2)

比这更容易。只需将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)

答案 1 :(得分:1)

试试此代码

    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