我正在使用Google表单将数据输入到Google电子表格中。我有两列包含CSV格式的数据。
我想使用公式生成一个矩阵,表示每个项目的出现次数和每个行/列的总数。
我已尝试过此线程https://productforums.google.com/forum/#!topic/docs/3vXh-NNtgW8中的示例公式,但当B列中有多个值时逻辑会中断。
这是一张包含上图中示例数据的表格。 https://docs.google.com/spreadsheets/d/1HHBTV8zTZs2xlGudta1o05b_zX21b5I3KRrBLo__kpo/edit#gid=450392226
谢谢!
答案 0 :(得分:3)
在this spreadsheet我尝试提供两种解决方案。请注意,公式非常复杂,但核心是:
=ArrayFormula(query({transpose(split(join(",",trim(transpose(split(query(rept(A2:A5&char(9),len(substitute(B2:B5,",",""))),,5000),char(9))))),",")), transpose(split(QUERY(rept(transpose(split(query(B2:B5&",",,rows(B2:B5)),","))&char(9), len(substitute(trim(transpose(split(query(rept(A2:A5&char(9),len(substitute(B2:B5,",",""))),,5000),char(9)))),",","") )),,50000),char(9)))&{"","",""}}, "select Col1, Count(Col2) group by Col1 pivot Col3") )
在第一个解决方案中,总计是用MMULT(见表)单独计算的,参考上面公式输出的表格。 E.g:
=arrayFormula({"Total", transpose(mmult(transpose(if(isblank((F2:J7)),0,(F2:J7))),row(F2:F7)^0))})
编辑/更新(在OP的第一个评论之后)
对于一个当然更容易维护的解决方案,请考虑以下步骤:
获取所有独特的水果(垂直):
= ArrayFormula(唯一(修剪(转置(拆分)('来自CSV列的数据'!A2:A&"," ,, 50000)," ")))))
获取所有唯一名称(水平):
= ArrayFormula(转置(唯一(转置(修剪(拆分(查询)' CSV列数据'!B2:B&"" ,, 50000)&# 34;,"))))))
= COUNTIF(过滤器('来自CSV列的数据'!$ A $ 2:$ A,regexmatch('来自CSV列的数据'!$ B $ 2:$ B,I $ 1 ))," "&安培; $ H2&安培;" &#34)
其中I1是第一个名字,H2是第一个水果。
这些步骤的示例是可见的here 请注意,提交新表单时,名称和水果列表将自动展开。只需要拖下COUNTIF公式......