如何将多个列值拉入Google表格中的单个列?

时间:2016-09-27 06:44:07

标签: google-apps-script google-sheets

我有12列正在通过公式“IMPORTRANGE”自动填充。

我需要将所有表值整理为单个值(条件是它的行为应该像“ARRAYFORMULA”)。

只是想知道是否存在任何特定的公式/查询用于此目的。

我添加了工作表的示例快照。我需要在不同的列中使用这些RED突出显示的值,比如说“EF”。

enter image description here

2 个答案:

答案 0 :(得分:5)

常见案例

我将展示3列的示例公式,但您可以对任意数量的列使用相同的逻辑。

enter image description here

公式是

=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"))

案例1。

不连续列

如果您的数据不在连续列中。

如果是这样,那么您需要将公式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")&"-"))),"-"))

案例2。

不是连续的列,数据是数字和文字

当您同时将数字和文本作为数据输入时,query将无效,因为它只能处理一列中的一种数据类型。

您的简化案例如下:

enter image description here

第一项任务是将名为“Ticket number”的所有列都抓取到一个表中。

让我们在“报告”表中工作,使用filter功能:

=FILTER(Data!1:1001,Data!2:2="Ticket number")

并得到结果:

enter image description here

第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) 

它将列标题添加到它们自己的列中以使标识清晰,这可能是您想要的,也可能不是(因为您只讨论将值放入一个列,这是该脚本的作用)。看一下链接中的两个表格,看看它在概念上的作用,看看它是否适合你。

我没有将其作为网络外的附加组件发布,因此您需要将代码复制并粘贴到脚本中