从QUERY()获取所有行到Google电子表格中的一个单元格

时间:2017-07-13 21:16:10

标签: google-sheets

我在电子表格中有以下公式:

  

= IFERROR(加入(CHAR(10),QUERY(附表!$ A $ 2:$ E," SELECT C,D,E其中A ='"& B $ 2& ;"' AND B = timeofday'"& text($ A4," HH:MM:SS")&"&#39 ;和C ='"& $ C $ 1&"'",-1)),)

返回一行时效果很好。如果它返回多行,它将不起作用。如何使用包含在行和列之间的CHAR(10)返回的所有行。基本上我希望所有返回的数据都以换行符分隔。所以当QUERY返回时

  

Item1 Item2 Item3

     

Item1A Item2A Item3A

它改为

  

的Item1

     

项目2

     

项目3

     

Item1A

     

Item2A

     

Item3A

我的目标是将所有返回的数据放在1个单元格中,每个项目之间有换行符。我能以任何方式实现这一目标吗?

这是copy of the file。细胞B3至F4是配方所在的良好样品细胞。

2 个答案:

答案 0 :(得分:2)

解决方案不完善,它在每行之前增加了额外的空格:

  Item1 Item2 Item3
  Item1A Item2A Item3A
^ spaces

第1步

在查询中获取原始公式+额外列:

=QUERY(data, "SELECT C, D, E, '@@' Where" & ... & "' label '@@' ''", -1)

结果:

  Item1  Item2  Item3  @@
  Item1A Item2A Item3A @@

<强>第二步

替换&#34; @@&#34;与char(10)

=ARRAYFORMULA(SUBSTITUTE(step1Formula,"@@",char(10)))

  Item1  Item2   Item3 

  Item1A Item2A  Item3A
                          ^ new lines

第3步

使用连接:

=ArrayFormula(" "&TRIM(CONCATENATE(" "&B16:E17)))

最终公式

=ArrayFormula(" "&TRIM(CONCATENATE(" "&SUBSTITUTE(QUERY(Schedule!$A$2:$E, "SELECT C, D, E, '@@' Where A = '" & B$2 & "' AND B = timeofday '" & text($A3, "HH:MM:SS") & IF(OR($C$1 = "*",ISBLANK($C$1)), "", "' AND C = '" & $C$1) & IF(OR($F$1 = "*",ISBLANK($F$1)), "", "' AND E = '" & $F$1) & "' label '@@' ''", -1),"@@",char(10)))))

共享文件:

https://docs.google.com/spreadsheets/d/1otcqvkXb5H3WTSi_exKw9UUcRqN8MKBZ5JYCmTLAWdQ/edit?usp=sharing

答案 1 :(得分:1)

我知道这不是一个优雅的解决方案,但它可以帮助您。在B3输入此公式,然后将其复制并粘贴到其他单元格上。

=iferror(join(char(10), query(Schedule!$A$2:$E, "select C,D,E where A='"&B$2&"' and B=timeofday '"&text($A3, "hh:mm:ss")&"' limit 1 offset 0")),"")
&iferror(char(10)&char(10) & join(char(10), query(Schedule!$A$2:$E, "select C,D,E where A='"&B$2&"' and B=timeofday '"&text($A3, "hh:mm:ss")&"' limit 1 offset 1")),"")
&iferror(char(10)&char(10) & join(char(10), query(Schedule!$A$2:$E, "select C,D,E where A='"&B$2&"' and B=timeofday '"&text($A3, "hh:mm:ss")&"' limit 1 offset 2")),"")
&iferror(char(10)&char(10) & join(char(10), query(Schedule!$A$2:$E, "select C,D,E where A='"&B$2&"' and B=timeofday '"&text($A3, "hh:mm:ss")&"' limit 1 offset 3")),"")
&iferror(char(10)&char(10) & join(char(10), query(Schedule!$A$2:$E, "select C,D,E where A='"&B$2&"' and B=timeofday '"&text($A3, "hh:mm:ss")&"' limit 1 offset 4")),"")

基本上,您无法使用Google query()连结结果字符串,因此我应该使用limit 1 offset 0limit 1 offset 1limit 1 offset 2一次取一行。等等。在这种情况下,最大值为5。样本表为here

enter image description here