FILTER
Фильтрация и отбор данных по заданным условиям
Функция FILTER Таблиц Гугл отображает только те строки или столбцы в диапазоне, которые соответствуют заданным условиям.
Отличительной особенностью этой формулы является то, что она работает как со строками, так и с столбцами.
Примечание
Это большой и подробный указатель на возможности формулыFILTERна русском языке. Все примеры доступны в Таблице, см. раздел Ссылки .
Описание
Функция FILTER универсальная и очень гибкая. Она очень быстрая и легко читается. Используя такие функции как REGEXMATCH и MATCH, можно имитировать работу SQL-подобных запросов типа like и выбора на основе списка. Это действительно удобно, когда требуется отобрать большое количество данных, не зная конечного числа аргументов в уловии отбора.
Для всех примеров будет использоваться следующий набор данных

Примеры
Колонка соответсвует конкретному значению

=FILTER('Данные'!A2:F18;'Данные'!F2:F18="A")
Данные содержат заданную подстроку
Вывести все имена, в которых есть буквосочетание ль

=FILTER('Данные'!A2:F;REGEXMATCH('Данные'!B2:B; "ль"))
Данные начинаются с определенной строки
Вывести имена, которые начинаются на А

=FILTER('Данные'!A2:F;REGEXMATCH('Данные'!B2:B; "^А"))
Данные не начинаются с определенной строки
Вывести имена не начинающиеся на А

=FILTER('Данные'!A2:F;REGEXMATCH('Данные'!B2:B; "^[^А]"))
Сравнение чисел
Вывести данные, числа которых меньше 2500

=FILTER('Данные'!A2:F;'Данные'!D2:D<2500)
Числа содержат определенную цифру
Номер содержит цифру 2

=FILTER('Данные'!A2:F;REGEXMATCH(TEXT('Данные'!A2:A; "0"); "2"))
Числа оканчиваются на определенную цифру
Номер оканчивается на цифру 2

=FILTER('Данные'!A2:F;REGEXMATCH(TEXT('Данные'!A2:A; "0"); "2$"))
Сравнение дат
Выбрать всё до даты 31.12.2017

=FILTER('Данные'!A2:F;'Данные'!C2:C<=DATE(2017;12;31))
Даты только определенного года
Только 2017 год

=FILTER('Данные'!A2:F;REGEXMATCH(TEXT('Данные'!C2:C; "yyyyMMdd"); "2017"))
Даты только определенного месяца
Только август 2019

=FILTER('Данные'!A2:F;EOMONTH('Данные'!C2:C;1)=EOMONTH(DATE(2019;8;1);1))
Любой август

=FILTER('Данные'!A2:F;MONTH('Данные'!C2:C)=8)
Отбор по счету (по очереди)
Выбрать каждую шестую строку

=FILTER('Данные'!A2:F; NOT(MOD(ROW('Данные'!A2:A)-1; 6)))
Выбрать каждую нечетную строку

=FILTER('Данные'!A2:F; ISODD(ROW('Данные'!A2:A)-1))
Данные, которые находятся в заранее заданном списке
Выбрать данные, имена которых находятся в списке {"Георгий";"Ермак";"Юлиус"}

=FILTER('Данные'!A2:F;IFERROR(MATCH('Данные'!B2:B;{"Георгий";"Ермак";"Юлиус"};0);))
Данные, которые соответствуют списку
Выбрать имена, которые находятся в списке. Список в I8:I12

=FILTER('Данные'!A2:F;MATCH('Данные'!B2:B;I8:I12;0))
Данные, которые отсутствуют в списке
Выбрать имена, которых нет в списке. Список в I15:I19

=FILTER('Данные'!A2:F;ISNA(MATCH('Данные'!B2:B;I15:I19;0)))
Данные, которые соответствуют “нечеткому” списку значений
Выбрать все, в поле Строка которых, есть последовательность символов “x” и, любая цифра или тире “-”

=FILTER('Данные'!A2:F;REGEXMATCH('Данные'!E2:E;"x[\d-]"))
Вывести все данные, где поле Имя начинается с буквы из списка
Список находится в I9:I12

=FILTER('Данные'!A2:F;REGEXMATCH('Данные'!B2:B; "(?i)^(" & TEXTJOIN("|";1; I9:I12) & ")"))
Пример выбора женских имен

=FILTER('Данные'!A2:F;REGEXMATCH('Данные'!B2:B; "(?i)(" & TEXTJOIN("|";1; I15:I19) & ")"))
или
=FILTER('Данные'!A2:F;REGEXMATCH('Данные'!B2:B; "(?i)(" & JOIN("|"; {"а$";"я$"}) & ")"))
Пример выбора мужских имен

=FILTER('Данные'!A2:F;NOT(REGEXMATCH('Данные'!B2:B; "(?i)(" & TEXTJOIN("|";1;I23:I27) & ")")))
Выборка с условием ИЛИ
Требуется отфильтровать данные в Дате которых указан 2019 год или Группа которых равна "B"

=FILTER('Данные'!A2:F;(YEAR('Данные'!C2:C)=2019) + ('Данные'!F2:F="B"))
Бесконечные диапазоны
Бесконечные диапазоны в FILTER могут создавать некоторые неудобства, особенно, если в выборку попадает достаточно много пустых строк. Они просто занимают место в результирующей Таблице. Если на это место внести данные, то получим ошибку
Ошибка
Массив не выведен, поскольку это привело бы к перезаписи данных в диапазоне.
Чтобы этого избежать, необходимо добавлять столько условий, сколько требуется для точной выборки только релевантных значений. Или использовать точные размеры диапазонов для выборки.
В примере ниже на листе Данные 1000 строк, из которых только 20 заполнены значениями. Вот результаты фильтров

Сравните
=FILTER('Данные'!A2:F;YEAR('Данные'!C2:C)<2018;'Данные'!A2:A<>"")
=FILTER('Данные'!A2:F;YEAR('Данные'!C2:C)<2018)
В первой формуле учитываются и не выводятся пустые строки 'Данные'!A2:A<>""
Фильтр по колонкам
Фильтр по колонкам проверяет условие в горизонтальном массиве. Если значение условно истинное, то колонка выведется, иначе нет.

Жестко заданные колонки по номерам. Только вторая и шестая колонка
=FILTER('Данные'!A1:F;{0\1\0\0\0\1})
Колонки по определенному условию. Если имя колонки равно “Имя” или “Группа”
=FILTER('Данные'!A1:F;ARRAYFORMULA(REGEXMATCH('Данные'!A1:F1;"(?i)(имя|группа)")))
Динамический фильтр колонок

В диапазоне F2:F7 находятся условия для фильтра
=FILTER('Данные'!A1:F;TRANSPOSE(F2:F7))