2017-02-17 88 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