2017-02-17 14 views
0

Я знаю, что правильно создаю массив, и раньше я использовал код автофильтра с массивами, но по какой-то причине, когда я пытаюсь фильтровать динамический массив возвращается только первое значение моего массива. Я создаю массив из уже отфильтрованного списка на одном листе, а затем перехожу на другой лист для фильтрации по значениям массива.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

Я тебя не понимаю. Вы написали _ «Я создаю массив из уже отфильтрованного списка» _. Ну, чтобы справиться с этой проблемой, вы должны действовать согласно моему коду (или эквиваленту). Так что либо вам нужно массив из непересекающегося (отфильтрованного) диапазона, либо вы _don't_. – user3598756

+0

У меня есть все значения, которые я хочу в моем массиве. Я просто не могу фильтровать их в автофильтре на втором листе. – BRCoder

0

StepArray рассматривается как значение, потому что вы сделали не set это будет диапазон.

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

Возможно, лучше? Просто предложение, я никогда не пытался фильтровать с помощью массивов.

+0

это не работает. вам лучше разместить ответы после того, как вы их протестировали, в то время как «предложения» могут быть даны в комментариях вместе с _disclaimer_, они такие вещи. вы можете удалить этот пост, ради того, чтобы не обманывать будущих читателей и сэкономить тяжелое downvoting. – user3598756

+0

Пробовал, не повезло. Ошибка «Autofilter of Range Class Failed». – BRCoder

+0

@ user3598756 Привет, приятель, мне очень жаль, что вы злитесь, но ... Я не могу комментировать ... = только что начался вчера, и у вас не так много репутации, как вы. = ( – JiheL

Смежные вопросы