2

我最近发布了很多 Array/Spill Range 答案,试图生成非 vba/App Script 解决方案。但是,我遇到了数组中的数组没有像我预期的那样溢出的情况。这个特定的问题使我发布了这个问题。

我正在解决的问题的概要:

  • 中 5 列数据的起始值A:E
  • OP 想要前四列的唯一列表 ( A:D)
  • Column E将值向右转置。

示例起始数据:

在此处输入图像描述

期望的结果:

在此处输入图像描述

我的解决方案电子表格发布在此处或查看您可以在重复选项卡中编辑的 google 表格版本

我可以很容易地使用前四列

=UNIQUE(FILTER(A:D,NOT(ISBLANK((A:A)))))

然后我可以使用下面的函数来创建转置值以向右溢出(如上所示)。

=TRANSPOSE(FILTER(E:E,(NOT(ISBLANK(E:E))*(A:A&B:B&C:C&D:D=I1&J1&K1&L1))))

我的挑战是让上面的公式溢出匹配前四列。显然我可以将公式向下拖动(这是我的建议),但我怎样才能使这个公式动态地向下溢出,类似于前四列?在我看来,下面的公式应该可以工作,但它会引发错误:

=FILTER(TRANSPOSE(FILTER($E:$E,(NOT(ISBLANK($E:$E))*($A:$A&$B:$B&$C:$C&$D:$D=I1:I999&J1:J999&K1:K999&L1:L999)))),NOT(ISBLANK(L1:L999)))

奖励/类似问题:我在这个答案中遇到了类似的问题。如果您能弄清楚如何column E此电子表格中制​​作动态溢出范围,我将支持答案。

4

1 回答 1

1
=LET(data,FILTER(A:E,A:A<>""),
column1,UNIQUE(FILTER(A:D,A:A<>"")),
tableC1,FILTER(A:A&B:B&C:C&D:D,A:A<>""),
tableC2,FILTER(E:E,A:A<>""),
table,CHOOSE({1,2},tableC1,tableC2),
utableC1,TRANSPOSE(UNIQUE(tableC1)),
v,UNIQUE(TRANSPOSE(IF(tableC1=utableC1,INDEX(table,,2),"")),1),
seqrv,SEQUENCE(ROWS(v)),
x,MMULT(LEN(v)--(v<>""),SIGN(SEQUENCE(COLUMNS(v))))-1,
y,MMULT(--(TRANSPOSE(seqrv)<seqrv),x)+seqrv,
column2,IFERROR(MID(TEXTJOIN(" ",1,v),y,x),""),
IF(SEQUENCE(1,COLUMNS(data))<=COLUMNS(column1),column1,column2))

这会产生所需的溢出结果,但 E 列的数据被连接到一个单元格中,而不是向右溢出。我希望这是可以接受的。使用上面的函数,结果将如下所示:

堆栈溢出

PS 部分归功于 Mark Fitzgerald 发布此答案

于 2021-08-14T20:45:56.447 回答