Листы Google: создайте сводку по счетчикам (для столбчатой ​​диаграммы), которая анализирует разделенные запятыми массивы, в которых уже есть запятые - PullRequest
1 голос
/ 18 апреля 2020

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

Я хотел бы составить итоговую сумму, чтобы можно было составить гистограмму. У меня есть вопрос с несколькими вариантами ответов с запятыми внутри них. Например:

Foods I like (select all that apply):

- Fruit (Apples, Oranges)
- Vegetables (Carrots, Corn)
- Meat (Beef, Chicken)

Формула =query({A5:A13},"SELECT Col1,count(Col1) group by Col1") даст мне что-то вроде:

Fruit (Apples, Oranges) -- 1
Fruit (Apples, Oranges), Vegetables (Carrots, Corn) -- 1
Fruit (Apples, Oranges), Vegetables (Carrots, Corn), Meat (Beef, Chicken) -- 1

Мой ожидаемый результат (используя те же данные выше):

Fruit (Apples, Oranges) -- 3
Vegetables (Carrots, Corn) -- 2
Meat (Beef, Chicken) -- 1


Ответ на аналогичный вопрос, на который я ссылался выше, будет таким:

=query(transpose(split(JOIN(",",A5:A13),",",true,true)),"SELECT Col1,count(Col1) group by Col1")

В данном случае это не сработает, поскольку разделит параметры на , Я также разделил бы каждый ответ на несколько ответов ... Это дает мне вывод наподобие:

Fruit (Apples -- #
Oranges) -- #
Vegetables (Carrots -- #
Corn) -- #
Meat (Beef -- #
Chicken) -- #

Как вы видите, варианты вопроса разбиты на несколько вариантов. Как составить сводку по счетчикам без ручного редактирования данных ответов?

РЕДАКТИРОВАТЬ: я создал тестовую таблицу .



РЕДАКТИРОВАТЬ: обновлено с решением @ zummontt :

В настоящее время я использую формулу =QUERY(TRANSPOSE(SPLIT(SUBSTITUTE(TEXTJOIN("|",TRUE,D3:D7),"), ",")|"),"|")),"SELECT Col1,count(Col1) group by Col1") и получаю вывод:

Fruit (Apples, Oranges) -- 3
Grain, Sweets -- 1
Grains, Fruit (Apples, Oranges) -- 1
Meat (Beef, Chicken) -- 2
Sweets -- 1
Vegetables (Carrots, Corn) -- 3

Проблемы с этим выводом:

  • не разделил "Зерна" и "Сладости"
  • не разделил "Зерна" и "Фрукты (яблоки, апельсины)"
  • как получить "Нет" (Я не ем еду) ", чтобы показать, если он имеет 0 счет?

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

У меня может быть ответ, который работает для вас. Вместо того, чтобы разбивать ответы на части, я просто делаю НАЙТИ по каждой строке ответа для различных вариантов еды. Если текст не найден в ответе, установите значение ПУСТО. Затем, используя COUNT для подсчета всех числовых значений c, выведите итоговую сумму.

=COUNT(ArrayFormula(IFERROR(FIND(D12,$C$3:$C$7,1),"")))

Здесь D12 - первая запись в вашем списке возможных вариантов питания, а C3: C7 - диапазон ответов. Эффективное выполнение:

=COUNT(ArrayFormula(IFERROR(FIND("Grains",ArrayOfResponses,1),"")))

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

См. Лист / вкладку Sheet1-GK, который я добавил к вашему образцу листа. Дайте мне знать, если это поможет, или вам нужно что-то еще.

1 голос
/ 19 апреля 2020

, как я вижу ),, поэтому я заменяю ), на )| с помощью SUBSTITUTE() и сохраняю ) дисплей

, затем использую SPLIT() из |

Однако он по-прежнему чувствителен к регистру, когда ваши данные не соответствуют "), "

=QUERY(TRANSPOSE(SPLIT(SUBSTITUTE(TEXTJOIN("|",TRUE,D2:D),"), ",")|"),"|")),"SELECT Col1,count(Col1) group by Col1")

Диапазон D2: D содержит

Fruit (Apples, Oranges)
Fruit (Apples, Oranges), Vegetables (Carrots, Corn)
Fruit (Apples, Oranges), Vegetables (Carrots, Corn), Meat (Beef, Chicken)

Надеюсь, это поможет

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

...