Мне нужна система, которая позволяет фильтровать записи по разным текстовым тегам.

Допустим, мы храним информацию о некоторых продуктах. У нас есть красные яблоки, груши, арбузы, огурцы, перец и хлеб. Мы сохраняем их на листе с названием «Данные» в столбце A. Следующие столбцы заняты тегами, например, Red Apples are Red, Sweet, Fruit, Unpacked; Перец красный, острый, овощной, фасованный; Хлеб просто фасован.

Затем на другом листе у нас есть выделенный диапазон, скажем A1: A10, который может принимать любой тег данных, например Spicy или Packed. Что мне нужно, так это когда кто-то вводит Пряный и Упакованный в этом диапазоне, он ищет все элементы, которые являются Пряными и Упакованными, и отображает их, поэтому в этом случае он будет отображать Перцы в ячейке B1.

Напомним: Data! A: A - имена записей, Data! B: Z - теги, Main! A1: A10 - теги, введенные пользователем, Main! B: B - записи с тегами, которые соответствуют введенным в A1: A10 .

Я пытался использовать FILTER, но не могу понять, как выбрать правильные диапазоны условий. Я чувствую, что это должно быть возможно в этой системе, и я действительно не хочу углубляться в область сценариев.

0
BestMordaEver 7 Окт 2019 в 13:04
Вам нужно сделать это с помощью пользовательского ввода или просто использовать функцию фильтрации листов Google?
 – 
PySeeker
7 Окт 2019 в 14:05
Им следует управлять с помощью пользовательского ввода, исключительно для целей презентации и организации.
 – 
BestMordaEver
7 Окт 2019 в 20:08

3 ответа

Этого можно добиться, используя вспомогательный столбец для сбора всех тегов, а затем формулу =query().

1) Начните с создания столбца с несколькими тегами, используя =join() или =textjoin(), фиксируя все потенциальные теги для каждого продукта.

Textjoin to multi-tag

2) Затем используйте этот ответ, который поможет вам создать необходимую формулу =query().

Query for result

1
a-burge 7 Окт 2019 в 15:07

Есть довольно простое решение.

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

=SUM(ARRAYFORMULA(COUNTIF(B1:1,'Main'!$A$1:$A$10)))

1

Затем на листе презентации зарезервируйте место, где вы можете вводить теги - по одному. В моем случае это диапазон A1: A10. Затем просто вставьте эту формулу в другое место

=IFERROR(FILTER(Data!$B:$B,Data!$A:$A=(10-COUNTBLANK($A$1:$A$10))),"")

В этом месте появятся все подходящие элементы. Я также добавил в формулу сортировку, почему бы и нет.

2 3

Вы можете использовать больше тегов, для этого просто увеличьте диапазон тегов и отредактируйте формулу, чтобы, когда теги не введены, СЧЁТЕСЛИ дает 0.

0
BestMordaEver 7 Окт 2019 в 20:26

if Data лист выглядит так:

0

а вам нужен «конструктивный» список, вы можете:

=SORT(FILTER(Data!A2:A, REGEXMATCH(TRANSPOSE(QUERY(TRANSPOSE(Data!B2:Z),,999^99)), 
 TEXTJOIN("|", 1, A1:A10))))

0


демонстрация электронной таблицы


0

если вам нужен «деструктивный» список:

=ARRAYFORMULA(SORT(QUERY({Data!A2:A, TRANSPOSE(QUERY(TRANSPOSE(Data!B2:Z),,999^99))}, 
 "select Col1 where "&TEXTJOIN(" and ", 1, IF(A1:A10<>"", 
 "Col2 contains '"&A1:A10&"'", ))&"", 0)))

0

0
player0 7 Окт 2019 в 22:30