我最近发布了很多数组/溢出范围答案,试图生成非 vba/App 脚本解决方案。然而,我遇到过这样的情况:数组中的数组没有像我预期的那样溢出。 这个具体问题导致我发布这个问题。
我正在解决的问题概要:
A:E
中5列数据的起始值。A:D
)Column E
值向右转置。A 栏 | B | C | D | E |
---|---|---|---|---|
阿尔法 | 太棒了 | 查理 | 德尔塔 | 1 |
阿尔法 | 太棒了 | 查理 | 德尔塔 | 2 |
阿尔法 | 太棒了 | 查理 | 德尔塔 | 3 |
德尔塔 | 回声 | 狐步舞 | 海湾 | 4 |
德尔塔 | 回声 | 狐步舞 | 海湾 | 5 |
德尔塔 | 回声 | 狐步舞 | 海湾 | 6 |
X射线 | 洋基队 | 祖鲁语 | 德尔塔 | 9 |
X射线 | 洋基队 | 祖鲁语 | 德尔塔 | 4 |
X射线 | 洋基队 | 祖鲁语 | 德尔塔 | 2 |
X射线 | 洋基队 | 祖鲁语 | 德尔塔 | 1 |
X射线 | 洋基队 | 祖鲁语 | 德尔塔 | 3 |
阿尔法 | 太棒了 | 查理 | 德尔塔 | 4 |
我 | J | K | L | M | N | O | P | 问 |
---|---|---|---|---|---|---|---|---|
阿尔法 | 太棒了 | 查理 | 德尔塔 | 1 | 2 | 3 | 4 | |
德尔塔 | 回声 | 狐步舞 | 海湾 | 4 | 5 | 6 | ||
X射线 | 洋基队 | 祖鲁语 | 德尔塔 | 9 | 4 | 2 | 1 | 3 |
我的解决方案电子表格发布在此处或查看谷歌表格版本,您可以在重复的选项卡中进行编辑。
我可以在单元格中使用以下公式轻松获取前四列
i1
=UNIQUE(FILTER(A:D,NOT(ISBLANK((A:A)))))
然后我可以使用下面的函数创建转置值以在
M1
中向右溢出(如上所示)。
=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
成为动态溢出范围,我会投票赞成答案。
解决了这个问题。 不幸的是,因为谷歌表格和Excel使用两个函数名称来做同样的事情,所以我无法获得两者的动态公式(表格使用
split
,而Excel使用
textsplit
)每个公式都希望让全范围的参数按一列过滤,一个字符表示转置前切割数据的最后一列号
谷歌表格
示例文件在这里
=LET(alldata,FILTER(A:E,A:A<>""), zSplitter,"?", zColumnCount,4,
allNames,HSTACK(CHOOSECOLS(alldata,SEQUENCE(1,zColumnCount))),
zNames,UNIQUE(allNames),
keysFiltered, BYROW(zNames,LAMBDA(eRow,TEXTJOIN(zSplitter,TRUE,eRow))),
keysFull,BYROW(allNames,LAMBDA(eRow,TEXTJOIN(zSplitter,TRUE,eRow))),
splitNums,BYROW(keysFiltered,LAMBDA(eRow,TEXTJOIN(zSplitter,TRUE,FILTER(CHOOSECOLS(alldata,zColumnCount+1),keysFull=eRow)))),
zElementCount,BYROW(splitNums,LAMBDA(eRow, LEN(eRow)-LEN(SUBSTITUTE(eRow,zSplitter,""))+1)), zMaxCol,MAX(zElementCount),
zSideArray,MAKEARRAY(ROWS(zNames),zMaxCol,LAMBDA(r,c,LET(tempRng,INDEX(splitNums,r,1),tempSplitRng,SPLIT(tempRng,zSplitter),IF(c>CHOOSEROWS(zElementCount,r),"",CHOOSECOLS(tempSplitRng,c))))),
HSTACK(zNames,zSideArray))
=LET(alldata,FILTER(A:E,A:A<>""),zSplitter,"?", zColumnCount,4,
allNames,HSTACK(CHOOSECOLS(alldata,SEQUENCE(1,zColumnCount))),
zNames,UNIQUE(allNames),
keysFiltered, BYROW(zNames,LAMBDA(eRow,TEXTJOIN(zSplitter,TRUE,eRow))),
keysFull,BYROW(allNames,LAMBDA(eRow,TEXTJOIN(zSplitter,TRUE,eRow))),
splitNums,BYROW(keysFiltered,LAMBDA(eRow,TEXTJOIN(zSplitter,TRUE,FILTER(CHOOSECOLS(alldata,zColumnCount+1),keysFull=eRow)))),
zElementCount,BYROW(splitNums,LAMBDA(eRow, LEN(eRow)-LEN(SUBSTITUTE(eRow,zSplitter,""))+1)), zMaxCol,MAX(zElementCount),
zSideArray,MAKEARRAY(ROWS(zNames),zMaxCol,LAMBDA(r,c,LET(tempRng,INDEX(splitNums,r,1),tempSplitRng,TEXTSPLIT(tempRng,zSplitter),IF(c>CHOOSEROWS(zElementCount,r),"",CHOOSECOLS(tempSplitRng,c))))),
HSTACK(zNames,zSideArray))