355PLM系统上线前奏:智能化模板破局BOM物料重复难题

职场计划有古哥 2024-04-11 05:20:51

在某工厂PLM系统上线进程中,我们需要核实BOM(物料清单)中各物料所对应的LOCATION信息,旨在确保BOM物料数据的唯一性。然而,原始数据表格中包含大量代码,且各物料的LOCATION信息均集中在单个单元格内。采用常规函数进行重复项检测时,难以实现精准判断。另一方面,完全依赖人工校对则工作量巨大,效率低下。

因此,当前亟需设计一款高效、快捷的模板工具,以准确识别并剔除BOM中的重复物料记录。具体的资料如下图:

需求分析

从上图中我们可以看出,尽管所有数据被合并至同一单元格内,但其排列仍具有一定规律:不同规格型号间以逗号“,”作为分隔符,而不同物料与其对应规格之间则通过换行进行区分。掌握了这两条规律,我们便能遵循“合→分→转”的逻辑思路,有效地解决这一问题。

首先,我们运用文本合并函数,将原数据中按行分布的所有物料规格通过逗号“,”连接起来,整合为单一单元格。随后,利用文本分离函数,以同样分隔符“,”将该单元格内的数据拆分为多个独立单元格,并调整为垂直排列。最后,借助统计函数进行计数,凡出现次数大于1的即为重复的物料代码。

合并数据

在工作表中新增一列,并于D3单元格内输入以下函数:

D3=TEXTJOIN(",",,B3:B147)

函数释义:

此函数将B列中B3至B147行的数据,以逗号“,”为分隔符进行合并,生成一个包含全部数据的单一单元格。由于原数据中已存在“,”作为各规格型号间的分隔标识,合并后该标识自然得以保留。实际效果可参见下图所示。

分开数据

基于先前合并的数据,在D列重新拆分并按垂直方向排列,您可在D3单元格中使用以下函数:

=TEXTSPLIT(TEXTJOIN(",",,B3:B147),,",")

效果请参阅下图所示:

统计数据

统计数据这里,最为便捷的方法就是在边上增加一列辅助列,出现数,录入以下函数:

E3=COUNTIFS(D3#,D3#)

函数释义:

该函数采用动态数组公式形式,通过COUNTIFS函数计算D列中与D3单元格内容相同的项出现的次数。结果会自动填充至对应区域,动态显示每一项数据的重复次数。具体效果请参考下图展示。

在已有统计结果的基础上,为筛选出出现次数大于1的重复规格及其对应次数,您可使用以下公式:

=UNIQUE(FILTER(D3:E721,E3#>1))

函数释义:

运用FILTER函数筛选D3:E721范围内满足条件(即E列出现次数大于1)的数据行。随后,UNIQUE函数对筛选结果进行去重处理,仅保留唯一的规格及其重复次数。最终呈现的表格将清晰显示出所有重复规格的数量及其各自重复次数。如图所示,至此,我们已完成对BOM型号规格的整理工作。

一键公式

为了避免额外占用数据区域,这里提供一种无需辅助列的函数写法。然而,该方法涉及较新版本的WPS公式,如REDUCE等,学习难度相对较大,故仅供对此类高级功能感兴趣的学习者参考。此公式的主要优点在于能够一键获取所需结果:

=LET( B, LET( A, TEXTSPLIT(TEXTJOIN(",", TRUE, B3:B147), ",", TRUE), DROP( REDUCE( "", UNIQUE(A), LAMBDA(X, Y, VSTACK(X, IF({1, 0}, Y, ROWS(FILTER(A, A=Y))))) ), 1 ) ), FILTER(B, TAKE(B, , -1) > 1) )

此公式执行过程如下:

使用TEXTJOIN和TEXTSPLIT将B3:B147范围内的数据合并、拆分,并保留原分隔符。

在内部LET语句中,通过UNIQUE函数获取拆分后的唯一规格列表。

使用REDUCE函数配合LAMBDA匿名函数,逐个处理唯一规格列表,构建包含规格及其重复次数的二维数组。

DROP函数去掉结果数组的第一列(即空字符串),留下规格及其重复次数。

最后,FILTER函数筛选出重复次数大于1的规格及其次数。

应用此公式后,效果如图所示。至此,我们成功实现了对BOM型号规格的整理,一键获取了所有重复规格及其重复次数。

0 阅读:0

职场计划有古哥

简介:感谢大家的关注