根据另一行的条件在一行中获取多个值转置

Get multiple value in one row transpose based on criteria on another row

我有一个从 Google 表单填充的 sheet。它带有一列公司名称和员工姓名。 company 列可以具有相同或重复的值,但 employee 列不能。那么,我怎样才能得到一个公司名称,所有员工姓名排成一行?

如果您使用 Google 电子表格,您可以研究 UNIQUE and FILTER 函数。这是一个例子:


公式 in D2:

=UNIQUE(A2:A)

公式 in E2:

  • 选项 1

    =TRANSPOSE(FILTER(B:B,A:A=D2))
    
  • 选项 2,上面的代码会很快变慢,所以也许可以改用:

    =TRANSPOSE(FILTER(B:INDEX(B:B,COUNTA(B:B)),A:INDEX(A:A,COUNTA(A:A))=D2))
    
  • 选项3,即使使用QUERY也是可能的:

    =TRANSPOSE(QUERY({$A:INDEX($B:$B,COUNTA(B:B))},"Select Col2 where Col1='"&D2&"'"))
    
  • 选项 4,Found 一种在 E2 中只使用单个公式的方法:

    =ARRAYFORMULA(ARRAY_CONSTRAIN(TRIM(SPLIT(TRIM(TRANSPOSE(QUERY(IF(TRANSPOSE(D2:INDEX(D:D,COUNTA(D:D)))=A2:INDEX(A:A,COUNTA(A:A)),B2:INDEX(B:B,COUNTA(B:B))&"|",),,9^99))),"|")),COUNTA(D2:INDEX(D:D,COUNTA(D:D))),100))
    

这样当您将数据添加到列 A:B 时,公式将自动更新您想要的输出:

单细胞解决方案:

=ARRAYFORMULA({SORT(UNIQUE(INDIRECT("A2:A"&COUNTA(A2:A)+1))), 
 SPLIT(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(ISNUMBER(QUERY(QUERY(A2:B, 
 "select count(A) where A is not null group by A pivot B", 0), 
 "offset 1", 0)), QUERY(QUERY(A2:B, 
 "select count(A) where A is not null group by A pivot B", 0), 
 "limit 0", 1)&"♦", )),,999^99))), "♦")})