PMC表格模型29:字母文本数字混合提取模型

古哥计划
古哥计划

优秀创作者

全文约1400字

大家好,我是古老师,专注于PMC(生产计划与控制)领域的教学。今天我们要介绍的是PMC系列中的第29个表格模型——字母、文本与数字混合提取模型。

在日常工作场景中,我们经常会遇到一个单元格内同时包含文本、字母和数字的情况。这些信息通常遵循一定的规则,代表特定含义。为了便于单独分析,我们需要将它们从单元格中分离出来。

例如,“库位A3-过期20240515、库位B12-客户冻结20240310”这样的内容,就需要被拆分为{"A3", "过期", "2024/05/15"}和{"B12", "客户冻结", "2024/03/10"}这样的格式,以便更好地进行后续处理和分析。

提取库位

一般这类单元格都有特定的规律。通过观察发现,库位编号(如A3、B12)是字母与数字组合而成,长度不一;库存状态以文本形式表示,长度也不固定,例如“过期”、“客户冻结”;只有日期码长度固定,如“20240515”。针对这类单元格,可以使用文本函数多次嵌套来提取所需信息。

在B2单元格中输入动态数组公式以提取单元格内容中的库位编号:

=TEXTBEFORE(TEXTAFTER(A2:A4,"库位"),"-")

函数解释:

TEXTAFTER(A2:A4, "库位"):首先找到文本“库位”之后的内容。

TEXTBEFORE(..., "-"):然后从上述结果中提取“-”之前的部分,即得到库位编号。

这样就可以有效地将库位编号从单元格中分离出来。这种方法适用于处理具有相似结构的数据。

库存状态

提取库存状态的思路与提取库位编号的思路基本相似。可以在C2单元格中输入动态数组公式以提取库存状态:

=TEXTAFTER(TEXTBEFORE(A2:A4,RIGHT(A2:A4,8)),"-")

函数解释:

RIGHT(A2:A4, 8):首先获取单元格内容中最后8个字符,这通常对应于日期码(如“20240515”)。

TEXTBEFORE(A2:A4, RIGHT(A2:A4, 8)):然后找到该日期码之前的所有内容。

TEXTAFTER(..., "-"):接着从上述结果中提取“-”之后的部分,即得到库存状态。

这样就可以有效地将库存状态从单元格中分离出来。这种方法适用于处理具有相似结构的数据,确保提取的信息准确无误。

提取日期

提取日期最关键的是如何将文本型数字转换为标准的日期格式。这里需要用到的核心函数是DATE。可以在E2单元格中输入以下动态数组公式来实现这一转换:

=LET(B,RIGHT(A2:A4,8),DATE(LEFT(B,4),MID(B,5,2),RIGHT(B,2)))

函数解释:

RIGHT(A2:A4, 8):首先获取单元格内容中最后8个字符,这通常对应于日期码(如“20240515”)。这个结果被赋值给变量 B。

LEFT(B, 4):从变量 B 中提取前4个字符作为年份。

MID(B, 5, 2):从变量 B 中提取第5到第6个字符作为月份。

RIGHT(B, 2):从变量 B 中提取最后2个字符作为日期。

DATE(...):将提取出的年、月、日组合成标准的日期格式。

通过使用LET 函数,可以简化公式的书写并提高可读性。LET 函数允许你定义中间计算结果(如 B),并在后续计算中重复使用这些结果。这样不仅使公式更加简洁,还提高了处理效率和准确性。这样处理后的日期可以直接用于后续的计算和分析。

合并公式

对于一个模型来说,一键生成结果并且支持动态扩展是非常方便的方法。可以使用以下动态数组公式实现这一目标:

=LET(A,TRIMRANGE(A2:A100),B,RIGHT(A,8),HSTACK(TEXTBEFORE(TEXTAFTER(A,"库位"),"-"),TEXTAFTER(TEXTBEFORE(A,B),"-"),DATE(LEFT(B,4),MID(B,5,2),RIGHT(B,2))))

函数解释:

TRIM(A2:A100):去除单元格内容中的多余空格,确保数据整洁。这个结果被赋值给变量 A。

RIGHT(A, 8):从变量 A 中提取最后8个字符,这通常对应于日期码(如“20240515”)。这个结果被赋值给变量 B。

TEXTBEFORE(TEXTAFTER(A, "库位"), "-"):首先找到文本“库位”之后的内容,然后提取其中“-”之前的部分,即得到库位编号。

TEXTAFTER(TEXTBEFORE(A, B), "-"):首先找到日期码之前的所有内容,然后从中提取“-”之后的部分,即得到库存状态。

DATE(LEFT(B, 4), MID(B, 5, 2), RIGHT(B, 2)):将日期码转换为标准的日期格式。

HSTACK(...):将上述三个部分(库位编号、库存状态和日期)横向堆叠在一起,形成最终的结果。

通过使用LET 函数,可以简化公式的书写并提高可读性。这样不仅使公式更加简洁,还提高了处理效率和准确性,从而实现一键生成结果并支持动态扩展的功能。

其他方法

学习其他方法的思路可以快速提高解决类似单元格提取问题的能力。以下方案可供参考和学习,函数解释部分可以通过与AI配合来更好地理解:

137

=LET(a,DROP(TEXTSPLIT(CONCAT(A2:A10),"-","库位"),1),b,INDEX(a,,2),HSTACK(INDEX(a,,1),REGEXP(b,"\D+"),--TEXT(REGEXP(b,"\d+"),"0-00-00")))

161

=DROP(REDUCE("",TRIMRANGE(A2:A100),LAMBDA(X,Y,VSTACK(X,LET(A,TEXT(TEXTSPLIT(SUBSTITUTES(Y,{"库位","2024"},{"","-2024"}),"-"),"0000年00月00日"),IFERROR(--A,A))))),1)

188

=LET(a,TEXTSPLIT(TEXTJOIN(";",TRUE,A2:A1000),"-",";"),b,REGEXP(INDEX(a,,2),"[0-9]+"),HSTACK(TEXTAFTER(INDEX(a,,1),"库位"),TEXTBEFORE(INDEX(a,,2),b),DATE(MID(b,1,4),MID(b,5,2),MID(b,7,2))))

山东省
浏览 33
收藏
点赞
分享
+1
+1
全部评论