Я создал рабочий лист, который содержит список продуктов для каждого приема пищи и позволяет пользователю выбрать серию блюд и получить большой список связанных с ними продуктов.
Я достигаю этого с помощью ручного процесса объединения функций FILTER() вместе, например:
=VSTACK(
IF(C2 = "","",FILTER(Meals!C:C,Meals!A:A=C2,"")),
IF(C3 = "","",FILTER(Meals!C:C,Meals!A:A=C3,""))...
)
Это не слишком гибко, и если у меня более 100 строк, формула слишком велика для Excel и ломается... есть ли лучший способ сделать это? FILTER(), похоже, не выполняет несколько поисков или диапазон поиска.
Есть ли способ заставить FILTER() принимать несколько включений (или диапазон) или другую формулу, которую мне следует использовать?
С помощью этой формулы:
=TOCOL(TEXTSPLIT(TEXTJOIN("|",TRUE,BYROW(A11:A12,LAMBDA(xx,TEXTJOIN("|",TRUE,IF(xx=A1:A9,B1:B9,""))))),"|",,TRUE))
результат
Возможно, для простоты и читабельности я бы использовал с помощью функции COUNTIF()
следующее:
=FILTER(Foodtbl[Food],COUNTIF(List[Selected list of food],Foodtbl[Meal]),"")
Кроме того, вместо использования диапазонов я преобразую диапазоны в Structured References
, то есть Tables
, чтобы всякий раз, когда происходит изменение исходных данных, это напрямую влияло на обновляемые формулы.
Исходная таблица называется Foodtbl
, а список — List
.
Еще один вариант: ISNA()
+ XMATCH()
.
=FILTER(Foodtbl[Food],1-ISNA(XMATCH(Foodtbl[Meal],List[Selected list of food])))
Еще один альтернативный способ — использование MMULT()
:
=FILTER(Foodtbl[Food],
MMULT(N(Foodtbl[Meal]=TOROW(List[Selected list of food])),{1;1}))
Обрабатывать повторяющиеся элементы; TOCOL
используется для исключения строк с NA()
из повторяющихся элементов.
Параметрами могут быть диапазоны или структурированные ссылки (Table[Meal], Table[Food]
).
=LAMBDA(meal, food, selected_meal,
LET(
matching_food, FILTER(food, COUNTIF(selected_meal, meal), NA()),
result, TOCOL(
IF(ISNA(matching_food), "none", SORT(UNIQUE(matching_food))),
3
),
result
)
)(A2:A200, B2:B200, D2:D10)
Что-то вроде
=FILTER(Meals!C:C,is number(xmatch(Meals!A:A,C2:C3)),"")