我想在 Excel 中组合三个不同的表格。我正在为表格的长度可能会有所不同而苦苦挣扎。 例如:
我想要实现的是一张表中所有表的数据,没有空格。因此,首先是第一个表中的两个条目,然后是第二个表中的三个条目,最后是第三个表中的条目。但是每个表中的行数可能会有所不同。
我怎样才能动态地做到这一点,以便当表中的条目数量发生变化时它可以处理这个问题?我正在使用 Mac 和 Office365。谢谢!
编辑: 使用 Ron Rosenfeld 的解决方案输出,列表的范围从单元格 5 - 单元格 103 下降。这可以减少到 5 - 15 吗?:
答案 0 :(得分:1)
如果您有 Excel 2019 或 Office 365,使用 FILTERXML
和 TEXTJOIN
函数,您可以使用:
=FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,Table1,Table2, Table3) & "</s></t>","//s[.!=0]")
如果这些零真的是空白,您可以从 xPath 参数中省略 [.!=0]
,但将其留在那里也无妨
编辑:
对于没有 FILTERXML
功能的 Office 365 的 MAC 版本,我相信以下内容会起作用:
=LET(
a,299,
x,IF(SEQUENCE(99,,0)=0,1,SEQUENCE(99,,0)*a),
y,TEXTJOIN(REPT(" ",a),TRUE,Table19,Table20,Table21),
z, TRIM(MID(y,x,a)),FILTER(z,(z<>"0")*(z<>""))
)
注意上面函数中的a
参数
space
来插入。99
通常足够大,但不适用于此数据集。299
对于实际数据中显示的数据集来说似乎足够大。
0
)的长度之和加上一(1
)。但不确定这一点。因此,如果您想动态计算 a
,您可以尝试以下操作:
=LET(
a,SUM(LEN(Table19[Column1]),LEN(Table20[Column1]),LEN(Table21[Column1]))+1,
x,IF(SEQUENCE(99,,0)=0,1,SEQUENCE(99,,0)*a),
y,TEXTJOIN(REPT(" ",a),TRUE,Table19,Table20,Table21),
z, TRIM(MID(y,x,a)),FILTER(z,(z<>"0")*(z<>""))
)
但不能保证。
答案 1 :(得分:0)
假设数据在 A:C 中,并且空单元格为空白(不是 0
)。
在 E1 中输入:
=IF(ROW()>COUNTA(A:C),"",
INDEX(A:C,
IF(ROW()<=COUNTA(A:A),ROW(),IF(ROW()<=COUNTA(A:B),ROW()-COUNTA(A:A),ROW()-COUNTA(A:B))),
IF(ROW()<=COUNTA(A:A),1,IF(ROW()<=COUNTA(A:B),2,3)))
)
想法:使用row()
来指导索引中的选择。 counta()
用于将“row()”转换为可用索引号的指南。还将 ""
> row()
的输出单元格设为空白 counta(a:c)
。
如果有效/无效,请分享。