全文约2040字;
阅读时间:约6分钟;
听完时间:约12分钟;
某工厂的仓库管理员小王在从ERP系统导出《仓库现存量报表》时发现,由于可能的系统设置问题,该报表格式存在大量无效的空行。具体表现为物料编码与条码错行显示。例如,物料代码“11ABB628”位于第2行B列,而对应的条码信息“4H42236587”和“4H42254750”却分别出现在第3行和第4行的H列。这种格式导致了筛选物料代码时无法同时查看条码信息,而在筛选条码信息时又看不到相应的物料代码。
这样的布局不仅影响了数据的可读性,还给数据分析带来了不便。为了解决这个问题,小王需要对报表进行调整,确保每个物料代码与其对应的条码信息在同一行内正确对齐。
整理思路针对这种错行的数据问题,需要对原始数据进行清洗,将物料代码的信息向下填充至对应的条码信息行。根据这一逻辑,可以使用一个IF条件判断来实现:即当某单元格为空时,显示上一行的值;当不为空时,则显示当前单元格的值。这个处理方式与SCAN函数的核心递归计算逻辑相吻合。因此,对于这张报表的整理,可以通过以下步骤来完成数据清洗与整理:
使用SCAN函数填充空行:利用SCAN函数根据上述IF条件判断逻辑(类似于 IF(Y="", X, Y)),从上到下逐行检查并填充物料代码,确保每个条码信息行都有正确的物料代码。
筛选非空数据:在填充完所有空行后,使用FILTER函数筛选出所有非空的数据行,以去除多余的空白行,得到最终整洁的数据表。
通过这两个步骤,可以有效地解决物料代码和条码信息错行的问题,使得每一条记录都能正确对应,从而便于后续的数据分析和处理。
单行填充在K列第1行录入标题“物料代码”同时在下方录入动态数组公式:
K2=SCAN("",A2:A1048,LAMBDA(X,Y,IF(Y="",X,Y)))
公式解释:
参数1(初始值):“”(空值),这是SCAN函数的起始值,后续在LAMBDA函数中定义为X。
参数2(数组):A2:A1048,这是包含物料代码的区域,其中可能有空单元格。这个数组中的每个元素将在LAMBDA函数中定义为Y。
参数3(函数):IF(Y="", X, Y),这是一个条件判断函数。如果当前单元格Y为空,则返回上一个非空单元格的值X;否则,返回当前单元格的值Y。
通过这个公式,SCAN函数会从A2开始逐行向下扫描,将空单元格填充为其上方最近的非空单元格的值,从而确保每条条码信息都有对应的物料代码。这样可以有效地解决物料代码与条码错行显示的问题。
多行填充由于不仅仅是A列存在空单元格,对应的B列到G列({"等级","规格","层级","花纹","品牌","数量"})也存在空单元格,如果一列对应一个SCAN函数来清洗数据的话,就会显得相当麻烦,此时可以配合一个转置函数TRANSPOSE多次转置来实现批量填充空单元格,录入动态数组公式:
K2=TRANSPOSE(SCAN("",TRANSPOSE(A2:G1048),LAMBDA(X,Y,IF(Y="",X,Y))))
公式解释:
参数1(初始值):“”(空值),这是SCAN函数的起始值,后续在LAMBDA函数中定义为X。
参数2(数组):TRANSPOSE(A2:G1048),首先将A2:G1048区域的数据进行转置,使得原本的行变成列,这样可以在一列中处理所有数据。这个转置后的数组中的每个元素将在LAMBDA函数中定义为Y。
参数3(函数):IF(Y="", X, Y),这是一个条件判断函数。如果当前单元格Y为空,则返回上一个非空单元格的值X;否则,返回当前单元格的值Y。
通过这个公式,SCAN 函数会从转置后的第一列开始逐行向下扫描,将空单元格填充为其上方最近的非空单元格的值。最后,再通过 TRANSPOSE 函数将处理后的数据重新转置回原始格式。
这种方法可以有效地批量填充多列中的空单元格,从而确保每条记录的完整性,简化了数据清洗的过程。
条码对应在进行完物料编码区的数据清洗后,就可以进行条码对应,而条码对应区也存在空行,此时可以筛选函数把空行来过滤掉,筛选的显示区合并区域函数HSTACK合并多行填充后和条码区、条件区域来作为显示区,条件为条码区不为空,录入动态数组函数公式:
=FILTER(HSTACK(TRANSPOSE(SCAN("",TRANSPOSE(A2:G1042),LAMBDA(X,Y,IF(Y="",X,Y)))),H2:I1042),H2:H1042<>"")
公式解释:
SCAN("", TRANSPOSE(A2:G1042), LAMBDA(X, Y, IF(Y="", X, Y))):
参考上方多行填充公式解释;
HSTACK(..., H2:I1042):
HSTACK 函数将清洗后的物料编码区域(即 TRANSPOSE(SCAN(...)) 的结果)与条码区域(H2:I1042)水平合并成一个新的数组。
FILTER(..., H2:H1042 <> ""):
FILTER 函数用于筛选出条码区域(H2:H1042)中不为空的行。
结果是一个只包含条码不为空的行的新数组,且每行包含了清洗后的物料编码信息和条码信息。
通过这个公式,可以有效地将清洗后的物料编码信息与条码信息合并,并过滤掉条码为空的行,从而得到一个整洁且完整的数据表。
今日总结通过一系列的数据清洗和整理步骤,小王成功解决了《仓库现存量报表》中物料编码与条码错行显示的问题。首先,利用 SCAN 函数结合 LAMBDA 函数,实现了单行及多行的空单元格填充,确保了每条记录中的物料代码能够正确对齐到相应的条码信息。接着,通过 TRANSPOSE 函数多次转置数据,批量处理了多列中的空单元格问题,极大地简化了数据清洗的过程。
在完成物料编码区的数据清洗后,小王进一步使用 FILTER 和 HSTACK 函数来筛选出条码不为空的行,并将清洗后的物料编码信息与条码信息合并成一个整洁且完整的数据表。这样不仅提高了数据的可读性,还为后续的数据分析提供了准确的基础。
整个过程中,小王巧妙地运用了Excel&WPS中的动态数组公式和函数,展示了高效的数据处理能力。这些方法不仅适用于当前的问题,也为未来类似的数据整理工作提供了宝贵的经验。通过这种方法,小王不仅节省了大量手动调整的时间,还提升了工作效率,确保了仓库管理的准确性。