全文约2300 字;
阅读时间:约6分钟;
听完时间:约12分钟;
在PMC生产计划的日常工作中,我们经常需要合并多个表格的数据来进行统计和分析。在传统表格软件中,有许多方法可以合并多表数据,其中最常见的方法之一是使用函数公式,比如通过核心函数 VSTACK 将多个表格的数据整合在一起以便进行数据分析。
然而,在多维表格工具中,由于字段的严格定义和缺乏类似于VSTACK 的合并功能,当我们需要汇总不同数据表时,可能会需要用到更高级的功能,例如 WPS 的脚本功能。这对普通用户来说可能较为困难。那么,有没有类似于 VSTACK 的函数可以替代方案呢?
为了帮助大家更好地理解如何在传统表格与多维表格中解决多表合并的问题,古老师将分别演示这两种表格使用函数来合并多个工作表(数据表)的方法。
传统表格在传统表格中,我们通常使用VSTACK 函数来合并不同的工作表。合并时有一些基本的要求:各工作表的列标题(即水平方向的标题)需要保持一致,而对于行方向则没有特别的限制,只需预留足够的扩展空间即可,例如预留 10000 行等。
以下面的工作簿为例,它包含3 张工作表,这些工作表的标题格式相同,在 A1:C1 的标题依次为:“工单”、“产品”、“数量”。垂直方向上的数据预计最大范围为 2000 行。
新建一张新的工作表,并命名为“合并”,在A1:C1录入标题“工单”、“产品”、“数量”后,在下方录入动态数组公式:
=LET(A,VSTACK(表1:表3!A2:C5000),FILTER(A,INDEX(A,,1)<>0))
公式解释:
VSTACK(表1:表3!A2:C5000):VSTACK 函数用于垂直堆叠多个范围。
表1:表3!A2:C5000 表示从“表1”到“表3”的每个工作表中的 A2 到 C5000 区域。这意味着我们将从每个工作表的 A2 到 C5000 这个区域的数据垂直堆叠起来。
LET(A, VSTACK(表1:表3!A2:C5000)):LET 函数允许我们在公式中定义名称及其值。
我们在这里定义了一个名为 A 的变量,它的值为 VSTACK(表1:表3!A2:C5000) 的结果,即所有工作表数据垂直堆叠后的结果。
FILTER(A, INDEX(A,,1) <> 0):FILTER 函数用于根据条件过滤数组中的元素。
INDEX(A,,1) 表示从数组 A 中选取第一列的所有元素。
INDEX(A,,1) <> 0 是一个逻辑条件,表示筛选出 A 数组中第一列不等于 0 的所有行。
结果是 FILTER 函数返回数组 A 中所有满足条件的第一列不等于 0 的行。
总结:
该公式首先通过 VSTACK 将三个工作表中的数据垂直堆叠成一个数组,然后通过 FILTER 函数过滤掉第一列值为 0 的行,从而得到一个干净的数据集供进一步分析使用。
多维表格新建一个多维表格,并将各个表的数据分别复制粘贴到对应的数据表中。需要注意的是,在多维表格中不要留下无效的空行,这一点与传统表格不同,因为在传统表格中,默认会保留空行。
多维表格中合并多个表的思路是使用XLOOKUP 加上辅助列来实现。这种方法有一定的限制,即待合并的表不宜过多,最好不超过 5 张。如果超过这个数量,则可能需要使用脚本来完成合并。
接下来,我们将新建一张数据表并命名为“合并”,用于合并表1到表3的数据。同时,我们需要创建一个新的编号字段作为辅助字段。
右键点击第一个字段,选择“插入记录”并向下插入,录入 1000 行。如果预计待合并的数据量会超过 1000 行,则继续插入更多行,直至达到预设的足够范围。
选择“字段”,然后选择“高级字段”下的“编号”,最后点击“确定”。这样就会生成一组从 1 到 1000 的升序编号。
在设计完这张数据表后,继续在表1到表3中使用相同的方法插入编号,确保每张表都有这个编号。对于待合并的表,不需要预留空行。插入编号后,你会发现各表之间的数据行数不同,对应的编号也会有所不同。当有新的记录增加时,编号会自动递增。
此时如果直接使用XLOOKUP 通过查找表4合并表的编号来引用表1到表3的数据信息,将会导致引用错误,因为每张表的编号都是从 1 开始的升序数组:1、2、3……因此,我们需要继续在每张表中插入辅助列,并将这个列字段设置为公式,标题为“唯一编号”,以实现错位数字。
由于是3张表,所以各表的公式字段设计如下:
第1张表的公式字段设计为:[@编号] * 3 - 2,返回的结果分别为:1、4、7……
第2张表的公式字段设计为:[@编号] * 3 - 1,返回的结果为:3、6、9……
第3张表的公式字段设计为:[@编号] * 3 - 0,返回的结果为:2、5、8……
这样一来,就可以通过表4的合并表与各表中的“唯一编号”进行 XLOOKUP 查找,原理是先查找表1,再查找表2,最后查找表3,从而间接地完成了3张表的合并。
为了使合并的表有表名,在表1到表3中分别新增加一个字段,并例为“表名”,默认值为表1、表2、表3,然后表4合并中录入以下公式:
工单公式:
XLOOKUP([@编号],表1![唯一编号],表1![工单],XLOOKUP([@编号],表2![唯一编号],表2![工单],XLOOKUP([@编号],表3![唯一编号],表3![工单],"")))
产品公式:
XLOOKUP([@编号],表1![唯一编号],表1![产品],XLOOKUP([@编号],表2![唯一编号],表2![产品],XLOOKUP([@编号],表3![唯一编号],表3![产品],"")))
数量公式:
XLOOKUP([@编号],表1![唯一编号],表1![数量],XLOOKUP([@编号],表2![唯一编号],表2![数量],XLOOKUP([@编号],表3![唯一编号],表3![数量],"")))
表名公式:
XLOOKUP([@编号],表1![唯一编号],表1![表名],XLOOKUP([@编号],表2![唯一编号],表2![表名],XLOOKUP([@编号],表3![唯一编号],表3![表名],"")))
以上的合并数据,格式不太整齐,需要通过一些操作来优化一下表格
隐藏编号字段增加筛选字段,条件为字段工单,条件为非空对字段表名进行分组测试删除数据效果如下:
最后总结:通过上述步骤,在多维表格中,我们成功利用 XLOOKUP 函数结合“唯一编号”这一辅助字段实现了表1至表3的数据合并。这种方法有效地解决了多表合并时可能出现的重复或缺失问题。具体来说,我们为每张表生成了唯一的编号序列,确保了数据的唯一性和准确性。此外,通过添加“表名”字段,我们能够清晰地区分数据来源,并通过隐藏编号字段、增加筛选条件以及对“表名”字段进行分组等操作进一步优化了合并后的表格结构,使之更加整洁易读。
这种方式不仅简化了数据处理流程,还提高了数据的可维护性。对于PMC生产计划人员而言,这无疑是一种高效且实用的数据合并解决方案。尽管在多维表格中缺少类似 VSTACK 的内置功能,但通过巧妙运用 XLOOKUP 和辅助字段,同样能够达到预期的效果,确保数据的准确合并与分析。
多维表格参考如下:
【金山文档| WPS云文档】 490
https://kdocs.cn/l/cfCyy3MwgYnb