我现在正在努力制作一个将自动更新的数据库。问题是,原来的格式是这样的:
名称 | 列表 | 列表 | 列表 | 列表 |
---|---|---|---|---|
名称 1 | 列表1 | 列表2 | 列表3 | 等等 |
名称2 | 列表1 | 列表2 | 列表3 | 列表4 |
我想做的最终结果是这样的
名称 | 列表 |
---|---|
名称 1 | 列表1 |
名称 1 | 列表2 |
对于最终结果的第一列,我成功地创建了它:ArgumentError: wrong number of arguments (given 1, expected 0) in `filter'
第二列,我创建它:=ARRAYFORMULA(Index(Flatten(Split(Rept(A2:A12&";",8),";"))))
--> 我使用过滤器,因为有几个名字,但没有填满最大数量,所以我想过滤空白的。
问题是如果可能的话,我想将两个公式合二为一,这样我就可以一步而不是两步完成。我已经探索过任何东西,但我被卡住了。请提供帮助,任何反馈将不胜感激。
答案 0 :(得分:1)
尝试将以下公式放入原本为空的两列范围的第 1 行(标题行):
=ArrayFormula({"Name","Nominee";QUERY(SPLIT(FLATTEN(FILTER(A2:A,A2:A<>"")&"|"&FILTER(B2:I,A2:A<>"")),"|"),"Select * WHERE Col2 Is Not Null")})
这将创建标题和所有结果。
工作原理:
标题“Name”和“Nominee”被指定为大括号内虚拟数组的第一行。如果您愿意,可以更改这些。分号的意思是“现在向下一排,把其余的放在下面。”
FILTER(A2:A,A2:A<>"")&"|"&FILTER(B2:I,A2:A<>"")
所有非空名称都连接到一个管道符号和所有提名(无论是否为空),其中该行的名称不为空。这将导致一个填满 name|nomination 或 name| 的网格(后者的提名为空白)。
FLATTEN
将从上述所有结果中形成一列。
SPLIT
将在管道符号处将其拆分,在提名旁边留下一个名称,或在空白旁边留下一个名称。
QUERY
将仅保留在第二列中获得提名的人。
如果您的原始数据来自表单,则该表单将在表单数据输入表中数据范围的顶部或底部添加行。这可能会导致每次在顶部添加新行时,上述公式都会将 A2:A 和 B2:I 范围向下调整 1。如果您的情况确实如此,请使用以下版本的公式(当然,确保将表单数据输入表的名称附加到所有范围):
=ArrayFormula(QUERY(IFERROR(IF(ROW(A:A)=1,{"Name","Nominee"},QUERY(IFERROR(SPLIT(FLATTEN(FILTER(A:A,A:A<>"")&"|"&FILTER(B:I,A:A<>"")),"|")),"Select * WHERE Col2 Is Not Null")),{"",""}),"Select * WHERE Col1 Is Not Null"))