代码之家  ›  专栏  ›  技术社区  ›  sjh3192

将包含组和组中项目的两列转换为一列

  •  0
  • sjh3192  · 技术社区  · 6 月前

    我在谷歌表格选项卡中有两个列,一个组列和一个项目列。项目列中的每个条目都是唯一的,只出现在一个组中。

    集团 项目
    A. 十、
    A. Y
    A. Z
    B 一、
    B J
    B K
    C P
    C Q
    C R

    我希望在新工作表中创建一列,其中a组后面是该组中的所有项目,然后是空行,最后是B组及其项目。所有群体都继续采用这种模式。公式应自动更新,以包含原始工作表中添加的任何新组或项目。

    输出
    A.
    十、
    Y
    Z
    B
    一、
    J
    K
    C
    P
    Q
    R

    我四处搜索,没有发现任何关于堆栈溢出或其他方面的类似问题。ChatGPT和Gemini使用ARRAYFORMULA提供了一些建议,例如:

    =ARRAYFORMULA(IF(A2:A<>"", A2:A&" | "&TEXTJOIN(", ",TRUE,FILTER(B2:B, A2:A=A2:A)), ""))

    但输出不是我所需要的。

    2 回复  |  直到 6 月前
        1
  •  1
  •   PatrickdC    6 月前

    使用筛选器和数组公式

    您可以使用 FILTER 根据组码对项目进行分组。之后,使用以下组合 TOCOL TOROW 将数组转换为所需的格式。公式应该如下:

    =LET(a, UNIQUE(TOCOL(A2:A,1)),
         TOCOL(BYROW(a,LAMBDA(x,TOROW({x;filter(B2:B,A2:A=x);" "}))),1))
    

    输出:

    A.
    十、
    Y
    Z
    B
    一、
    J
    K
    C
    P
    Q
    R

    注: 将组码(样本数据中的A、B、C)设置为 STRONG / BOLD 格式化只能手动完成。

    参考文献:

        2
  •  0
  •   z..    6 月前

    另一种解决方案使用 REDUCE :

    =REDUCE("Out",UNIQUE(TOCOL(A2:A,1)),LAMBDA(a,c,{a;c;FILTER(B2:B,A2:A=c);""}))