我有一个类似的功能:
Function GetFilteredRange(ByVal id As Integer) As Range
Worksheets("Sheet1").Range("C20").CurrentRegion.Select
Selection.AutoFilter Field:=14, Criteria1:=id
Dim rng As Range
Set rng = Worksheets("Sheet1").AutoFilter.Range.Rows.SpecialCells(xlCellTypeVisible)
Selection.AutoFilter
Set GetFilteredRange = rng
End Function
类似这样的函数似乎无法返回完整的结果。它只返回一行只有一个范围的区域,其中应该有两行。
我发现的是,自动过滤的结果可能具有(或确实具有多个区域)。在这种情况下,我检查了“自动筛选”范围是否确实有多个区域(两个区域)。因此,为了返回完整的结果,我想我必须遍历所有区域并将这些区域添加到最终由于该函数而返回的范围中。这是走的路还是有一种更简单的方法?
我不必复制范围,只需要遍历返回的范围即可使用字段的值。
更新:
我得出的结论是不可能的(基于this post)。每个范围都应该是工作表的一部分。换句话说,我必须将内容复制到另一个范围并遍历该范围。