我正在尝试合并两个大小相等的溢出范围,以便溢出范围 A 的第一列位于溢出范围 B 的第一列旁边。
我已经接近答案了,但与此同时,我有一种感觉,我正在以完全错误的方式去做。
例如:
在A1
输入公式=SEQUENCE(3,2,1)
。
在A5
输入公式=CHAR(SEQUENCE(3,2,65))
我的想法是用FILTERXML
.
这将连接两个范围并开始构建 xml 字符串(在 cell 中输入F1
):
=LET(ColumnNum,COLUMN(A1#),
FirstTable, A1#,
SecondTable, A5#,
PrefixA, "<a" & ColumnNum & ">",
SuffixA, "</a" & ColumnNum & ">",
PrefixB, "<b" & ColumnNum & ">",
SuffixB, "</b" & ColumnNum & ">",
xml, PrefixA & FirstTable & SuffixA &
PrefixB & SecondTable & SuffixB,
xml)
这完成了 xml 并返回最终溢出的范围。
=LET(StartCol,COLUMN(F1),
xml,F1#,
LastCol,StartCol+COLUMNS(xml)-1,
finalxml,"<y>" & TEXTJOIN("",FALSE,IF(COLUMN(xml)=StartCol,"<x>","") & xml & IF(COLUMN(xml)=LastCol,"</x>","")) & "</y>",
CHOOSE(SEQUENCE(,COLUMNS(xml)*2,1),
FILTERXML(finalxml,"//x/a1"),
FILTERXML(finalxml,"//x/b1"),
FILTERXML(finalxml,"//x/a2"),
FILTERXML(finalxml,"//x/b2")))
这适用于两列的两个范围,但列数会改变,因此CHOOSE
每次都需要手动更新语句。
有没有办法让这个工作?乐于采取LAMBDA
解决方案,但怕我不能使用新TEXTSPLIT
类型的功能。
在 A9 放
并在 B9 中放置
现在将 A9:B9 复制到 C9:D9。
如果要交错的列多于两列,只需在两列的倍数范围内继续从 E9 开始复制。
此外,如果您有三个以上的“源”范围,只需扩展第三个或第四个范围的公式,并将“/2”更改为“/3”或“/4”或您正在使用多少个范围。
编辑:起初我想不出一种从单个动态范围公式中解析它的方法。遗憾的是,Excel 不允许使用静态数组语法连接数组,例如不允许使用 {A1#, A5#}。然而,最近添加的 MAKEARRAY 和 LAMBDA 提供了一个有趣的解决方案:
单一配方解决方案!
不幸的是,由于某种原因(我认为是一个错误),您不能在 lambda 函数中使用范围。所以最简单的就是定义你的范围两次——在 LET 语句中,一次作为 INDEX 的一部分。
与您当前的公式相比,这是一个更容易扩大规模的公式:
=LET(t_count, 3, tables, (A1#,A5#,A9#), row_count, ROWS(INDEX(tables,0,0,1)), col_count, COLUMNS(INDEX(tables, 0, 0, 1)) * t_count, s, SEQUENCE(row_count, col_count, 0), INDEX(tables, INT(s / col_count) + 1, INT(MOD(s, col_count) / t_count) + 1, MOD(s, t_count) + 1))
或相同的公式分解以获得更好的概述:
要修改公式,您只需更新
t_count
并列出tables
.