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

问题描述 投票:0回答:2

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

团体 项目
A X
A
A Z
B
B J
B K
C P
C
C R

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

输出
A
X
Z
B
J
K
C
P
R

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

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

但是输出不是我所需要的。

google-sheets lambda spreadsheet flatten
2个回答
0
投票

使用过滤器和数组公式

您可以使用

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
X
Z
B
J
K
C
P
R

注意: 将组代码(示例数据中的 A、B、C)设置为

STRONG
/
BOLD
格式只能手动完成。

参考资料:


0
投票

使用

REDUCE
的另一种解决方案:

=REDUCE("Out",UNIQUE(TOCOL(A2:A,1)),LAMBDA(a,c,{a;c;FILTER(B2:B,A2:A=c);""}))
© www.soinside.com 2019 - 2024. All rights reserved.