Фильтрация одномерного массива в VBA Excel с помощью функции Filter. Синтаксис и параметры функции Filter. Пример фильтрации одномерного массива.
Функция Filter
Filter – это функция, которая возвращает массив, содержащий строки исходного одномерного массива, соответствующие заданным условиям фильтрации.
Примечания
- исходный (фильтруемый) массив должен быть одномерным и содержать строки;
- индексация возвращенного массива начинается с нуля;
- возвращенный массив содержит ровно столько элементов, сколько строк исходного массива соответствуют заданным условиям фильтрации;
- переменная, которой присваивается возвращенный массив, должна быть универсального типа (As Variant) и объявлена не как массив (не
myArray()со скобками, а myArray без скобок).
Функция Filter автоматически преобразует обычную переменную универсального типа, которой присваивается отфильтрованный список, в одномерный массив с необходимым количеством элементов.
Синтаксис
1 |
Filter(sourcearray, match, [include], [compare]) |
Параметры
Параметр | Описание |
---|---|
sourcearray | Обязательный параметр. Одномерный массив, элементы которого требуется отфильтровать |
match | Обязательный параметр. Искомая строка. |
include | Необязательный параметр. Значение Boolean, которое указывает:
|
compare | Необязательный параметр. Числовое значение (константа), указывающее тип сравнения строк. По умолчанию – 0 (vbBinaryCompare). |
Compare (значения)
Параметр compare может принимать следующие значения:
Константа | Значение | Описание |
---|---|---|
vbUseCompareOption | -1 | используется тип сравнения, заданный оператором Option Compare |
vbBinaryCompare | 0 | выполняется двоичное сравнение (регистр имеет значение) |
vbTextCompare | 1 | выполняется текстовое сравнение (без учета регистра) |
Пример фильтрации
Фильтрация списка в столбце «A» по словам, начинающимся с буквы «К», и загрузка результатов в столбец «B»:
Пример кода VBA Excel с функцией Filter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Primer() Dim arr1, arr2, arr3, i As Long 'Присваиваем переменной arr1 массив значений столбца A arr1 = Range("A1:A" & Range("A1").End(xlDown).Row) 'Копируем строки двумерного массива arr1 в одномерный arr2 ReDim arr2(1 To UBound(arr1)) For i = 1 To UBound(arr1) arr2(i) = arr1(i, 1) Next 'Фильтруем строки массива arr2 по вхождению подстроки "К" 'и присваиваем отфильтрованные строки переменной arr3 arr3 = Filter(arr2, "К") 'Копируем строки из массива arr3 в столбец "B" For i = 0 To UBound(arr3) Cells(i + 1, 2) = arr3(i) Next End Sub |
Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.
Подскажите, как обозначить фильтрацию массива по значению, скопированному из ячейки A5 другой книги?
Значение в A5 может меняться.
Здравствуйте, Наталья!
В примере кода VBA Excel с функцией Filter строка 12 будет выглядеть так:
Вторая книга (Книга2.xlsm) должна быть открыта. Замените имена книги и листа на свои.
Добрый день!
Подскажите, можно ли использовать данную функцию, например, при условии фильтрации столбца по значению >0?
Здравствуйте, Анна!
Это невозможно, так как параметр match не может быть условием. Вам может подойти сортировка диапазона.
Обсуждение закрыто.