我有12列正在通过公式“IMPORTRANGE”自动填充。
我需要将所有表值整理为单个值(条件是它的行为应该像“ARRAYFORMULA”)。
只是想知道是否存在任何特定的公式/查询用于此目的。
我添加了工作表的示例快照。我需要在不同的列中使用这些RED突出显示的值,比如说“EF”。
答案 0 :(得分:5)
我将展示3列的示例公式,但您可以对任意数量的列使用相同的逻辑。
公式是
=TRANSPOSE(SPLIT(ARRAYFORMULA(CONCATENATE(TRANSPOSE(FILTER(A2:C,A2:A>0)&"-"))),"-"))
A2:C
是包含所有列的范围A2:A>0
是A列的条件,只选择适当的行。这可能是A2:A<>""
用于文本列或任何条件来限制行数。-
是任何不属于原始数据的符号。您可以为同一目的使用符号组,甚至是特殊单词:=TRANSPOSE(SPLIT(ARRAYFORMULA(CONCATENATE(TRANSPOSE(FILTER(A2:C,A2:A>0)&"devide"))), "devide"))
不连续列
如果您的数据不在连续列中。
如果是这样,那么您需要将公式FILTER(A2:C,A2:A>0)
的这一部分更改为查询:
=query(A:AO;"select A,I,Q,Y,AG,AO... where A > 0")
或更好:
=query({A:AO};"select Col1, Col6, Col20, Col22, ... where Col1 > 0")
最终公式将如下所示:
=TRANSPOSE(SPLIT(ARRAYFORMULA(CONCATENATE(TRANSPOSE(query({A:AO};"select Col1, Col6, Col20, Col22, ... where Col1 > 0")&"-"))),"-"))
不是连续的列,数据是数字和文字
当您同时将数字和文本作为数据输入时,query
将无效,因为它只能处理一列中的一种数据类型。
您的简化案例如下:
第一项任务是将名为“Ticket number”的所有列都抓取到一个表中。
让我们在“报告”表中工作,使用filter
功能:
=FILTER(Data!1:1001,Data!2:2="Ticket number")
并得到结果:
第2步实施第一个公式:
=TRANSPOSE(SPLIT(ARRAYFORMULA(CONCATENATE(TRANSPOSE(Report!A3:D&"-"))),"-"))
另一种方法是逐列组合列:
={A2:A5;B2:B5;C2:C5}
如果您喜欢这种方法,可以read more here。
答案 1 :(得分:2)
Max的答案非常好,如果能解决你的问题,我建议你使用它。
如果你想要更灵活一点,我写了一个名为Reshape的库,它允许你以你想要的长格式融合数据。
你可以运行类似的东西:
=MELT(IMPORTRANGE(<spreadsheet>, "A:DY"), , , , 1)
它将列标题添加到它们自己的列中以使标识清晰,这可能是您想要的,也可能不是(因为您只讨论将值放入一个列,这是该脚本的作用)。看一下链接中的两个表格,看看它在概念上的作用,看看它是否适合你。
我没有将其作为网络外的附加组件发布,因此您需要将代码复制并粘贴到脚本中