Возврат автофильтрованного диапазона из функции - PullRequest
0 голосов
/ 22 октября 2018

У меня есть такая функция:

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

Такая функция, похоже, не возвращает полный результат.Он возвращает только диапазон с одной строкой, где ожидаются две строки.

Что я обнаружил, так это то, что автоматически отфильтрованный результат может иметь (или имеет несколько областей).В этом случае я проверил, есть ли в диапазоне автофильтрации несколько областей, что было истинно (2 области).Таким образом, чтобы вернуть полный результат, я предполагаю, что мне нужно пройтись по всем областям и добавить эти области в диапазон, который в конечном итоге возвращается в результате выполнения функции.Это путь или есть более простой метод?

Мне не нужно копировать диапазон, просто нужно перебрать возвращаемый диапазон, чтобы использовать значения полей.

ОБНОВЛЕНИЕ:

Я пришел к выводу, что это невозможно (на основании этого поста ).Каждый диапазон должен быть частью рабочего листа.Другими словами, я должен скопировать контент в другой диапазон и работать через этот диапазон.

...