352整合WPS新函数:REDUCE、LAMBDA构建高效BOM整理解决方案

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

当PMC进行MRP需求计算时,必须对BOM物料清单的结构具备高度熟悉度,确保能够高效地校正与整理不合规的BOM表格。一旦完成整理,规范化的对应关系即可顺利通过标准化表格形式导入至信息化系统中。

通常情况下,信息化程度较低的工厂,其BOM物料清单的规范性往往较弱,可能存在多种多样的格式差异。以下图所示的BOM对应关系表为例,其中:

A列记载物料编号,

B列则记录与其对应的电子板编号。

其对应规则为: 若一个物料编号仅对应一个电子板编号,则直接显示该单一板号;若对应多个板号,则以逗号分隔列出所有相关板号。例如,“A2=0CK102BK56A、B2=C204,C205,C206,C213”,表示物料编号A2对应4个不同的电子板编号:C204、C205、C206和C213。

当前任务要求将上述的对应关系进行拆分处理,即将一个物料编号所对应的多个电子板编号,逐一拆分为独立的行项,确保每个电子板编号仅对应一个物料编号,并在拆分后添加相应的序号标识。以先前示例中的4个板号为例,应将其拆分为四行数据,每行均对应料号“0CK102BK56A”,并分别标注编号为1、2、3、4。鉴于待处理数据量较大,需要利用WPS表格的函数功能,设计出一键式快速整理数据。

需求分析

在上述数据中,编号与板号之间呈现明显的一对多关系。尽管如此,这些对应的多个板号并非分布在各自独立的单元格中,而是被合并存放于同一个单元格内,并通过逗号“,”作为分隔符进行区分。鉴于存在这一特定的分隔符号,我们可以有效地运用“TEXTSPLIT”函数,针对此符号对含有多个板号的单元格进行逐行拆分,从而实现数据的规范化。

在成功对含有多个板号的单元格进行分列后,我们可结合使用“IF”函数来动态返回与之对应的编号。其逻辑如下:每当分列操作产生一行新的板号数据,就返回一个相应的编号。至于编号的具体数值,可借助“SEQUENCE”函数自动生成连续的序号序列。

编号的生成依据为经过分列操作后所得到的行数,该行数数据可通过运用“ROWS”函数精确计算得出。基于此,我们能够运用“IF”、“SEQUENCE”等函数为分列后每一行独立的板号数据赋予合适的编号。

为完成整个处理流程,后续可采用“REDUCE”函数结合“LAMBDA”匿名函数以及“VSTACK”和“DROP”函数,对已编号的数据进行逐行累加式迭代处理。这一系列函数的协同工作将确保最终生成的数据结构符合预期需求,圆满实现对原始多板号单元格的分列、编号及有效组织。

数据分行

对合并单元格的板号进行按行分列,录入函数:

=TEXTSPLIT(C3,,",")

效果如下图所示:

对应P/N

把板号分离后,需要对应原来的编号,也就是资材P/N,这里用IF的经典数组应用来实现,录入以下函数:

=IF({1,0},B3,TEXTSPLIT(C3,,","))

效果如下图:

数据编号

数据编号的生成依据为经过分列处理后的行数。为实现这一目标,首先可为分列后的数据指定一个名称,例如“A”,应用公式 =TEXTSPLIT(C3,,",") 进行分列。接下来,使用 ROWS(A) 函数计算分列后所得数组“A”的行数。

以此行数为基础,利用 SEQUENCE 函数生成一个与之长度相匹配的数字序列。最后,借助 HSTACK 函数将这个数字序列与分列后的原始数据并行排列,从而为每一条原始数据项赋予相应的编号。这样便完成了数据的编号工作。

录入以下公式:

=LET(A,TEXTSPLIT(C3,,","),HSTACK(SEQUENCE(ROWS(A)),IF({1,0},B3,A)))

效果如下图:

Y值转换

在进行数据合并之前,为了确保与通过 REDUCE 函数所定义的唯一 Y 值相匹配,需对原始公式进行适当调整。原公式中涉及单元格 B3 和 C3,然而这两者无法直接对应到单一的 Y 值。为解决这个问题,我们对引用 C3 的部分进行修改,以使其与 B3 单元格保持在同一行但不同列的位置上。

具体做法是,用 OFFSET 函数替换对 C3 的直接引用,新的公式结构如下:=OFFSET(B3,,1)。这里,OFFSET 函数以 B3 为基准单元格,第一个逗号后面为空表示行偏移量为 0(即保持在同一行),第二个逗号后面数值 1 表示列偏移量为 1,即向右侧移动一列。如此一来,原公式中的 C3 单元格被等价替换成与 B3 同行且在其右侧一列的单元格,从而确保了二者共同对应一个唯一的 Y 值。这样,经过转换后的公式便适于在数据合并过程中与相应的 Y 值关联。

数据合并

在完成 Y 值的转换之后,现已具备进行数据堆叠合并的条件。为此,可运用以下公式:

=DROP(REDUCE("",C3:C13,LAMBDA(X,Y,VSTACK(X,LET(A,TEXTSPLIT(Y,,","),HSTACK(SEQUENCE(ROWS(A)),IF({1,0},OFFSET(Y,,-1),A)))))),1)

通过执行该公式,即可实现一键整理并编号的高效数据整理效果。

效果如下图所示:

1 阅读:21

职场计划有古哥

简介:感谢大家的关注