Excel - 动态合并来自多个表的数据

时间:2021-06-21 22:02:10

标签: excel

我想在 Excel 中组合三个不同的表格。我正在为表格的长度可能会有所不同而苦苦挣扎。 例如:

table 1 table 2 table 3

我想要实现的是一张表中所有表的数据,没有空格。因此,首先是第一个表中的两个条目,然后是第二个表中的三个条目,最后是第三个表中的条目。但是每个表中的行数可能会有所不同。

output table

我怎样才能动态地做到这一点,以便当表中的条目数量发生变化时它可以处理这个问题?我正在使用 Mac 和 Office365。谢谢!

编辑: 使用 Ron Rosenfeld 的解决方案输出,列表的范围从单元格 5 - 单元格 103 下降。这可以减少到 5 - 15 吗?: intermediate solution

2 个答案:

答案 0 :(得分:1)

如果您有 Excel 2019 或 Office 365,使用 FILTERXMLTEXTJOIN 函数,您可以使用:

 =FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,Table1,Table2, Table3) & "</s></t>","//s[.!=0]")

如果这些零真的是空白,您可以从 xPath 参数中省略 [.!=0],但将其留在那里也无妨

enter image description here

编辑:

对于没有 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)。但不确定这一点。
    • 您当然可以根据需要进行调整
  • 如果数字太大,您可能会遇到 32,767 个字符的限制。如果发生这种情况,则会出现错误消息。

因此,如果您想动态计算 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)

如果有效/无效,请分享。