Arrays VBA:如何根据从单元格范围创建的数组进行筛选

Arrays VBA:如何根据从单元格范围创建的数组进行筛选,arrays,vba,autofilter,Arrays,Vba,Autofilter,我知道我创建的数组是正确的,而且我以前在数组中使用过autofilter代码,但由于某种原因,当我尝试通过动态数组进行筛选时,只有数组的第一个值返回。我从一张工作表上已过滤的列表创建数组,然后转到另一张工作表,按数组值进行过滤 Dim StepArray As Variant Dim LastRow As Long LastRow = Cells(Rows.Count, 1).End(-4162).Row StepArray = Range("C4:C" & LastRo

我知道我创建的数组是正确的,而且我以前在数组中使用过autofilter代码,但由于某种原因,当我尝试通过动态数组进行筛选时,只有数组的第一个值返回。我从一张工作表上已过滤的列表创建数组,然后转到另一张工作表,按数组值进行过滤

 Dim StepArray As Variant
 Dim LastRow As Long


  LastRow = Cells(Rows.Count, 1).End(-4162).Row
  StepArray = Range("C4:C" & LastRow).SpecialCells(xlCellTypeVisible).Value
  Sheet2.Select
  LastRow = Cells(Rows.Count, 1).End(-4162).Row
  Range(Cells(1, 1), Cells(LastRow, 5)).AutoFilter Field:=4, Criteria1:=StepArray, Operator:=xlFilterValues

  End Sub
StepArray被视为值,因为您没有将其设置为范围

Set StepArray = Range("C4:C" & LastRow).SpecialCells(xlCellTypeVisible)
也许更好?只是一个建议,我从未尝试使用数组进行过滤。

编辑以添加过滤范围为连续范围的情况

数组的范围值不适用于非连续范围,而过滤范围很可能是这样

您必须在范围内循环并填充数组,如

Function GetFilteredValues(rng As Range) As Variant
    Dim cell As Range
    Dim iCell As Long

    ReDim arr(1 To rng.Count)
    For Each cell In rng
        iCell = iCell + 1
        arr(iCell) = cell.Value
    Next
    GetFilteredValues = arr
End Function
在主代码中使用,如下所示

StepArray = GetFilteredValues(Range("C4:C" & LastRow).SpecialCells(xlCellTypeVisible))
如果过滤范围实际上是一个连续的范围,那么您必须对其进行转置并获得一维数组

StepArray = Application.Transpose(Range("C4:C" & LastRow).SpecialCells(xlCellTypeVisible).Value)

这不管用。你最好在测试后发布答案,同时可以在评论和免责声明中给出建议。你可能想删除这篇文章,这样既不会欺骗未来的读者,又不会给自己带来沉重的打击。尝试过之后,出现了“范围类自动筛选失败”错误。@user3598756你好,伙计,很抱歉你很生气,但是。。。我还不能发表评论=我昨天才开始工作,没有你那么有名=@JiheL,我不生气。我只是告诉你这里的情况。你可能想参观一下,看看有没有帮助。回到您的答案:OP的代码有这样一个语句:StepArray=RangeC4:C&LastRow.SpecialCellsxlCellTypeVisible.Value->他想在变量数组中存储一个范围值,并将其用作后续自动筛选的条件。他不想将其设置为范围对象。因此,你的建议偏离了轨道,如果你仔细阅读问题并了解相关的对象和方法,你就会知道这一点。否则,您可以在我的代码中使用commentsLater,因为我转置了数组,并且所有过滤的值都存在,我认为上面的内容是不必要的。我唯一的问题是按数组过滤。我不明白你的意思。您编写了我从已筛选的列表创建数组。好吧,要处理这个问题,你必须按照我的代码或同等标准行事。因此,要么你确实需要一个非连续过滤范围之外的数组,要么你不需要。我的数组中有我想要的所有值,我只是无法在第二张图纸上的自动过滤中按它们过滤。如果你的过滤范围幸运地是连续的,那么请参阅编辑答案的最后一部分。是的,一维数组的转换工作正常。非常感谢。