Подтвердить что ты не робот

Фильтровать диапазон по массиву

У меня есть таблица Google, в которой представлены команды ЕВРО-2012, и их оценки:

Team     Points  Goals scored
------   ------  ------------
Germany    6          3
Croatia    3          3
Ireland    0          1
...       ...        ...

Теперь я хочу отфильтровать этот список, чтобы результат содержал только подмножество вовлеченных команд. В частности, я хочу, чтобы в результирующем списке содержались только команды Германии, Нидерландов, Португалии, Италии, Англии, Франции, Испании и Хорватии.

Я знаю, что могу использовать функцию FILTER для извлечения одного значения из таблицы. Таким образом, я мог бы написать выражение FILTER, подобное =FILTER(A2:C; A2:A = 'Germany' OR A2:A = 'Netherlands' OR A2:A = 'Portugal' OR ...), но я хотел бы избежать этого, поскольку список команд является своего рода динамическим.

Итак, вопрос: как я могу отфильтровать таблицу с помощью диапазона значений, а не только одного значения?

4b9b3361

Ответ 1

Для тех, кто ищет ответы, которые, как и я, наткнулись на эту ветку, см. Эту страницу форума по продуктам Google, где и Йоги, и Ахаб представляют решения вопроса о том, как отфильтровать диапазон данных по другому диапазону данных.

Если A3:C содержит диапазон данных УЕФА ЕВРО-2012, подлежащих фильтрации, а D3:D содержит список команд, по которым необходимо выполнить фильтрацию, тогда E3...

=FILTER(A3:C, MATCH(A3:A, D3:D,0))

или же

=FILTER(A3:C, COUNTIF(D3:D, A3:A))

Positive filter results

И наоборот, если вы хотите фильтровать по командам, не указанным в D3:D, то E3...

=FILTER(A3:C, ISNA(MATCH(A3:A, D3:D,0)))

или же

=FILTER(A3:C, NOT(COUNTIF(D3:D, A3:A)))

Negative filter results

Вот пример электронной таблицы, которую я сделал, чтобы продемонстрировать эффективность этих функций.

Ответ 3

для тех, кому нужно использовать формулы Грега и бороться с несоответствием диапазона FILTER

=FILTER(A1:A, MATCH(A1:A, B1:B, 0))

=FILTER(A1:A, COUNTIF(B1:B, A1:A))

=FILTER(A1:A, ISNA(MATCH(A1:A, B1:B, 0)))

=FILTER(A1:A, NOT(COUNTIF(B1:B, A1:A)))

в случае, если вам нужно использовать формулу FILTER для возврата оценки между двумя диапазонами, и эти два диапазона имеют разный размер (например, когда они возвращаются из запроса) и не могут быть изменены, чтобы соответствовать одному размеру, и вы только что получили FILTER has mismatched range sizes. Expected row count: etc. FILTER has mismatched range sizes. Expected row count: etc. Ошибка, то это обходной путь:

для простоты, скажем, ваши диапазоны фильтра: A1: A10 и B1: B8, вы можете использовать скобки массива {} чтобы добавить две виртуальные строки в диапазон B1:B8 для соответствия размеру A1:A10, используя REPT где необходимо количество Повторения должны быть рассчитаны путем простого расчета между начальными диапазонами.

затем к этому REPT формуле, нам нужно добавить +1 в качестве коррекции/отказоустойчивой (в случае, если разница между двумя начальными диапазонами 1), потому что REPT работает с минимумом 2 повторений. так что в некотором смысле нам нужно будет создать диапазон B1:B11 (из B1:B8), а позже мы просто обрежем последнюю строку из диапазона, так что это будет B1:B10 против A1:A10. мы будем использовать 2 уникальных символа для REPT

Следующим шагом будет завернуть REPT в SPLIT и разделить на 2-й уникальный символ. затем (исходя из дальнейшей необходимости) этот SPLIT должен быть заключен в TRANSPOSE (потому что мы хотим сопоставить размер столбца с размером столбца), и последним шагом будет заключить его в QUERY и снова limit вывод простой математикой COUNTA(A1:A10) чтобы обрезать последний повтор. вместе это будет выглядеть так:

=FILTER(A1:A10, NOT(COUNTIF(QUERY({B1:B8; 
 TRANSPOSE(SPLIT(REPT("♂♀", COUNTA(A1:A10)-COUNTA(B1:B8)+1), "♀"))}, 
 "limit "&COUNTA(A1:A10), 0), A1:A10)))