2017-02-17 75 views
0

我知道我正在创建数组,并且之前使用过数组的自动过滤器代码,但由于某种原因,当我尝试使用动态数组进行过滤时只有我的数组的第一个值回来了。我从一张纸上已经过滤的列表中创建数组,然后转到另一张纸上,按照数组值进行过滤。因为你没有set这是一个范围VBA:我如何过滤从单元格范围创建的数组

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 

回答

1

编辑添加的情况下的过滤范围是连续的一个

值的范围,以阵列不与非连续范围像过滤一个工作是非常可能是

你必须循环通过范围和填充阵列,等

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) 
+0

在我的代码中,我转置了数组,过滤值存在,我不认为上述是必要的。我唯一的问题是过滤b y数组。 – BRCoder

+0

我不明白你的意思。你写了_“我从已经过滤的列表中创建数组”_。那么,为了处理这个问题,你需要按照我的代码(或等价物)行事。所以无论你是否需要一个不连续(过滤)范围内的数组,或者你不需要。 – user3598756

+0

我有我想要的所有值在我的阵列中,我似乎无法在第二张自动过滤器中过滤它们 – BRCoder

0

StepArray被视为值。

Set StepArray = Range("C4:C" & LastRow).SpecialCells(xlCellTypeVisible) 

也许更好?只是一个建议,我从来没有试图过滤数组。

+0

这不起作用。你最好在测试后发布答案,而“建议”可以在评论中和_disclaimer_一起给出,他们是这样的。你可能想要删除这篇文章,为了既不欺骗未来的读者,也为自己节省沉重的投降 – user3598756

+0

试过了,没有运气“范围级失败的自动过滤器”错误出现了。 – BRCoder

+0

@ user3598756你好,我很抱歉,你很生气,但...我还不能评论= DI刚刚从昨天开始,并没有像你这样的声誉=( – JiheL

相关问题