Я обновил вашу таблицу, добавив формулу в Data!F2
=IFERROR(FILTER(A2:D9,
IF(Front!$C2 = TRUE, SEARCH(Front!$B2, $B$2:$B$9), LEN($A$2:$A$9)),
IF(Front!$C3 = TRUE, SEARCH(Front!$B3, $B$2:$B$9), LEN($A$2:$A$9)),
IF(Front!$C4 = TRUE, SEARCH(Front!$B4, $B$2:$B$9), LEN($A$2:$A$9)),
IF(Front!$C6 = TRUE, SEARCH(Front!$B6, $C$2:$C$9), LEN($A$2:$A$9)),
IF(Front!$C7 = TRUE, SEARCH(Front!$B7, $C$2:$C$9), LEN($A$2:$A$9)),
IF(Front!$C8 = TRUE, SEARCH(Front!$B8, $C$2:$C$9), LEN($A$2:$A$9)),
IF(Front!$C10 = TRUE, SEARCH(Front!$B10, $D$2:$D$9), LEN($A$2:$A$9)),
IF(Front!$C11 = TRUE, SEARCH(Front!$B11, $D$2:$D$9), LEN($A$2:$A$9))), "No Values Returned in filter. Please try again.")
Это должно сделать то, что вы ищете.
Обновлять
Меня попросили показать, как работает эта функция.
Чтобы начать с IFERROR
, это обернуто вокруг основной функции, поэтому, если FILTER
ничего не возвращает, пользователь не встречает сообщение об ошибке.
Основная часть функции построена на FILTER
, который действует как прокси для QUERY
, что изначально и пробовал @Sam Breddy.
Работая с флажками, которые оцениваются как TRUE
или FALSE
в зависимости от того, отмечены они или нет, мы можем приступить к созданию нашей функции динамической фильтрации.
Первый параметр фильтра ... IF(Front!$C2 = TRUE, SEARCH(Front!$B2, $B$2:$B$9), LEN($A$2:$A$9) ...
определяет, есть ли какие-либо Apples
в $B$2:$B$9
, только если флажок в Front!$C2
установлен на TRUE
.
Уловка здесь заключается в том, чтобы иметь допустимое значение, когда флажок установлен на FALSE
. Если для параметра FALSE
задано значение «ничего / пусто», появится сообщение об ошибке:
FILTER has mismatched range sizes. Expected row count: 8. column count: 1. Actual row count: 1, column count: 1.
Чтобы противостоять этому, я просто возвращаю длину первого столбца обратно в функцию с LEN($A$2:$A$9)
, что не повлияет на фильтр.
Интересная часть - это SEARCH
, который возвращает:
The position at which a string is first found within text and ignores capitalization of letters. Returns #VALUE! if the string is not found.
Поиск находит строку, которую вы ищете ... в данном случае Apple
, а затем передает местоположение этой строки обратно в FILTER
, позволяя отображать только те строки, где она оценивается как TRUE
.
Например. SEARCH(Front!$B2, $B$2:$B$9)
вернет 1
Используя SEARCH
метод для каждого последующего параметра нашей FILTER
функции, они действуют как OR
, позволяя функции оценивать APPLES
или ORANGES
.
Честно говоря, я попытался решить эту проблему и в итоге оказался на высоте. Я не думаю, что это сработает для элементов в одном столбце с одинаковой первой буквой
Например. Если вы ищете Apples
и Andy's
в одном столбце ...
Я также уверен, что могут возникнуть некоторые проблемы с выполнением такого рода динамической фильтрации по двум столбцам с одинаковыми значениями, но это решение должно соответствовать вашим потребностям.
Ваше здоровье,
person
Chef1075
schedule
02.08.2018