结合2个谷歌表格公式

时间:2021-03-09 09:22:40

标签: google-sheets google-sheets-formula array-formulas

我现在正在努力制作一个将自动更新的数据库。问题是,原来的格式是这样的:

<头>
名称 列表 列表 列表 列表
名称 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),";")))) --> 我使用过滤器,因为有几个名字,但没有填满最大数量,所以我想过滤空白的。

问题是如果可能的话,我想将两个公式合二为一,这样我就可以一步而不是两步完成。我已经探索过任何东西,但我被卡住了。请提供帮助,任何反馈将不胜感激。

1 个答案:

答案 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|nominationname| 的网格(后者的提名为空白)。

FLATTEN 将从上述所有结果中形成一列。

SPLIT 将在管道符号处将其拆分,在提名旁边留下一个名称,或在空白旁边留下一个名称。

QUERY 将仅保留在第二列中获得提名的人。


如果您的原始数据来自表单,则该表单将在表单数据输入表中数据范围的顶部或底部添加行。这可能会导致每次在顶部添加新行时,上述公式都会将 A2:AB2: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"))

相关问题