Функция 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;{011})
Колонки по определенному условию. Если имя колонки равно “Имя” или “Группа”
=FILTER('Данные'!A1:F;ARRAYFORMULA(REGEXMATCH('Данные'!A1:F1;"(?i)(имя|группа)")))
Динамический фильтр колонок
В диапазоне F2:F7
находятся условия для фильтра
=FILTER('Данные'!A1:F;TRANSPOSE(F2:F7))
Ссылки
- FILTER — Cправка — Редакторы Документов
- Примеры формул в Таблице
Google Docs Editors Help
Sign in
Google Help
- Help Center
- Community
- Google Docs Editors
- Privacy Policy
- Terms of Service
- Submit feedback
Send feedback on…
This help content & information
General Help Center experience
- Help Center
- Community
Google Docs Editors
Как сделать массив с перезаписью |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Добрый день. Вопрос следующий. касается Гугол-таблиц. Есть список URL. По формуле с этого списка — парсятся заголовки страниц. Если он один (заголовок H3) — он — просто, как и нужно — прописывается напротив в соседнем столбце. Но если их несколько, выбивает ошибку !ССЫЛ (Массив не выведен, поскольку это привело бы к перезаписи в следующей строке; что понятно и логично). Проблема в том, что нужно — предусматривать место для заголовков H3 (нужно спарсить H2 — H3), т.к. их может быть 2 или 5, к примеру. И чтобы, когда я растягиваю формулу, относительно урл — появлялись и заголовки, то есть формировались дополнительные строки. Как это сделать? Фото вложил Заранее спасибо
В общем, чтобы в конечном итогу — было так — https://drive.google.com/open?id=188mkNOgCCp2MOXGoqoTmKII50czVbFj7
хочу как то редактировать результаты определенной колонки массива функции filter так, чтобы эта колонка редактировалась и в первоисточнике, то есть в обход ошибки «Массив не выведен, поскольку это привело бы к перезаписи данных в диапазоне X.»
-
Вопрос заданболее года назад
-
146 просмотров
Этого нельзя сделать без внешних инструментов, т.к. нарушает принципы работы электронных таблиц.
Самое правильное для вас — погрузиться в концепцию табличных процессоров и понять, как это работает.
Пригласить эксперта
-
Показать ещё
Загружается…
06 июн. 2023, в 02:35
15000 руб./за проект
06 июн. 2023, в 00:15
30000 руб./за проект
05 июн. 2023, в 23:42
300 руб./за проект
Минуточку внимания
Некоторые гугл-формулы, такие как: Filter, Importrange и т.п., возвращают массив, который может вызвать конфликт диапазонов: «Массив не выведен, поскольку это привело бы к перезаписи данных в диапазоне X». Дабы избежать данной ошибки, есть ли возможность в коде скрипта проверить размер возвращаемого формулой результата? Желательно без «Создать страницу — вызвать там — определить размер — удалить страницу».
Была также идея проверять ячейку функции на «#ССЫЛ!» с помощью .getDisplayValue(), при проставлении рандомного значения в предполагаемый диапазон ее результата. Но реализация с постоянными обращениями к таблице через .setValue(), .getValue() и т.д. выйдет «дорогой» по времени исполнения скрипта.
Прошу подсказать более изящное решение.
Заранее благодарен!
задан 24 апр 2022 в 5:59
2
Чтобы узнать размер массива, используйте функцию ROWS.
Вот пример использования:
=ROWS(IMPORTHTML(«https://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0», «table»))
Результат выполнения — число 7.
На самом деле, обычно заранее известно, сколько первых строк максимально вы могли бы взять из массива результата, если такое ограничение есть на листе. Скажем, у Вас есть всего 5 строк. Тогда можно сразу же ограничить вывод результата с помощью ARRAY_CONSTRAIN, чтобы избежать конфликтов при выводе результата:
=ARRAY_CONSTRAIN(IMPORTHTML("https://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0", "table"), 5, 10)
ответ дан 15 июл 2022 в 13:58
ternovsky Пользователь Сообщений: 302 Ternov |
Добрый день, эксперты. Прикрепленные файлы
|
vikttur Пользователь Сообщений: 47199 |
Формула массива, ввод тремя клавишами: |
Kuzmich Пользователь Сообщений: 8000 |
ternovsky, |
ternovsky Пользователь Сообщений: 302 Ternov |
|
Kuzmich Пользователь Сообщений: 8000 |
#5 03.02.2021 18:56:25
|
||
ternovsky Пользователь Сообщений: 302 Ternov |
#6 03.02.2021 19:08:45 vikttur,
ПРОМО = это именованный диапазон на другом листе |
||
ternovsky Пользователь Сообщений: 302 Ternov |
Kuzmich, а этот макрос в гугл ексель получится вставить)) |
vikttur Пользователь Сообщений: 47199 |
#8 03.02.2021 20:20:59
…если знаете и VBA, и JS и сумеете адаптировать его к другому языку О формуле. Писал для Excel и в Excel… Да и функции MINUS в Вашей формуле не видно. |
||
Alex T. Пользователь Сообщений: 63 |
#9 03.02.2021 20:30:56 А если вдруг гугл не личный, а корпоративный, причем уровня Enterprise по моему — можно воспользоваться их конвертером для избранных |
admin
- В этой теме 17 ответов, 10 участников, последнее обновление 2 года, 11 месяцев назад сделано suprun.work.
Просмотр 3 сообщений — с 16 по 18 (из 18 всего)
-
Автор
Сообщения
-
Ошибка
Массив не выведен, поскольку это привело бы к перезаписи данных в диапазоне Q2.
Ошибка!
Укажите допустимую дату.Работает формула только один раз. Когда возвращаешься на этот лист, то ошибка
Лист надо добавить в исключение
Автоматические функции в таблице
Пометьте лист как без авт. форматирования. И затем пропишите формулу.
01.07.2020 в 16:26
#11528
А как собрать в отдельном листе незабранные заказы сразу с нескольки листов? К примеру начался новый месяц, но еще висят заказы с предыдущего месяца
-
Автор
Сообщения
Просмотр 3 сообщений — с 16 по 18 (из 18 всего)
- Для ответа в этой теме необходимо авторизоваться.
Некоторые гугл-формулы, такие как: Filter, Importrange и т.п., возвращают массив, который может вызвать конфликт диапазонов: «Массив не выведен, поскольку это привело бы к перезаписи данных в диапазоне X». Дабы избежать данной ошибки, есть ли возможность в коде скрипта проверить размер возвращаемого формулой результата?
Желательно без «Создать страницу — вызвать там — определить размер — удалить страницу». Была также идея проверять ячейку функции на «#ССЫЛ!» с помощью .getDisplayValue(), при проставлении рандомного значения в предполагаемый диапазон ее результата. Но реализация с постоянными обращениями к таблице через .setValue(), .getValue() и т.д. выйдет «дорогой» по времени исполнения скрипта. Прошу подсказать более изящное решение. Заранее благодарен!
- google-apps-script
- google-spreadsheet
- googlesheets
Отслеживать
задан 24 апр 2022 в 5:59
Alex Koltc Alex Koltc
Быстрее и правильнее именно setValues() и getValues(). 1 раз считали данные. Отфильтровали скриптом. 1 раз записали данные.
05. Google таблицы. Функции ArrayFormula и ARRAY_CONSTRAIN
24 апр 2022 в 7:52
Обычно, вставляя формулу вы знаете занимаемый ею размер. Как минимум это видно по передаваемым диапазонам или генерируемым последовательностям. Т.о. размер диапазона всегда известен. Но я не знаю готовых программных алгоритмов, позволяющих по тексту формулы определить этот размер.
Источник: ru.stackoverflow.com
Как разрешить перезапись результатов функции Filter?
хочу как то редактировать результаты определенной колонки массива функции filter так, чтобы эта колонка редактировалась и в первоисточнике, то есть в обход ошибки «Массив не выведен, поскольку это привело бы к перезаписи данных в диапазоне X.»
- Вопрос задан более года назад
- 121 просмотр
Комментировать
Решения вопроса 1
Google Products Expert
Этого нельзя сделать без внешних инструментов, т.к. нарушает принципы работы электронных таблиц.
Самое правильное для вас — погрузиться в концепцию табличных процессоров и понять, как это работает.
Источник: qna.habr.com
FILTER
Функция FILTER Таблиц Гугл отображает только те строки или столбцы в диапазоне, которые соответствуют заданным условиям. Отличительной особенностью этой формулы является то, что она работает как со строками, так и с столбцами.
Google таблицы. Динамическая генерация данных в диапазоне. Функции ArrayFormula&Offset Урок 29.
Примечание Это большой и подробный указатель на возможности формулы 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)^(» |»;1; I9:I12) )»))
Пример выбора женских имен
=FILTER(‘Данные’!A2:F;REGEXMATCH(‘Данные’!B2:B; «(?i)(» |»;1; I15:I19) )»))
=FILTER(‘Данные’!A2:F;REGEXMATCH(‘Данные’!B2:B; «(?i)(» |»; ) )»))
Пример выбора мужских имен
=FILTER(‘Данные’!A2:F;NOT(REGEXMATCH(‘Данные’!B2:B; «(?i)(» |»;1;I23:I27) )»)))
Выборка с условием ИЛИ
Требуется отфильтровать данные в Дате которых указан 2019 год или Группа которых равна «B»
=FILTER(‘Данные’!A2:F;(YEAR(‘Данные’!C2:C)=2019) + (‘Данные’!F2:F=»B»))
Бесконечные диапазоны
Бесконечные диапазоны в FILTER могут создавать некоторые неудобства, особенно, если в выборку попадает достаточно много пустых строк. Они просто занимают место в результирующей Таблице. Если на это место внести данные, то получим ошибку
Ошибка Массив не выведен, поскольку это привело бы к перезаписи данных в диапазоне.
Чтобы этого избежать, необходимо добавлять столько условий, сколько требуется для точной выборки только релевантных значений. Или использовать точные размеры диапазонов для выборки.
В примере ниже на листе Данные 1000 строк, из которых только 20 заполнены значениями. Вот результаты фильтров
=FILTER(‘Данные’!A2:F;YEAR(‘Данные’!C2:C)»»)
=FILTER(‘Данные’!A2:F;YEAR(‘Данные’!C2:C)<2018)
В первой формуле учитываются и не выводятся пустые строки ‘Данные’!A2:A<>»»
Фильтр по колонкам
Фильтр по колонкам проверяет условие в горизонтальном массиве. Если значение условно истинное, то колонка выведется, иначе нет.
Жестко заданные колонки по номерам. Только вторая и шестая колонка
=FILTER(‘Данные’!A1:F;<011>)
Колонки по определенному условию. Если имя колонки равно “Имя” или “Группа”
=FILTER(‘Данные’!A1:F;ARRAYFORMULA(REGEXMATCH(‘Данные’!A1:F1;»(?i)(имя|группа)»)))
Динамический фильтр колонок
В диапазоне F2:F7 находятся условия для фильтра
=FILTER(‘Данные’!A1:F;TRANSPOSE(F2:F7))
Ссылки
- FILTER — Cправка — Редакторы Документов
- Примеры формул в Таблице
Источник: contributor.pw