最后边那位同学,来蹭课的吧?
周庄
前言
通常编码或代码都是分段式结构,中间用符号隔开以区别不同的代码。如:
YRO-2000-H188
H000.MP.E.B
当我们需要将最后一段代码取出时,往往因为段数不统一,字符数不统一等原因,很难实现。
今天就给大家讲一下如何快速提取最后一段代码,并探讨其中的原理。
如下图所示:是一套WBS编码,要求将最后一段代码的字符取出,如下图所示:
1 解法一
先看复合公式:
B4=TRIM(RIGHT(SUBSTITUTE(A4,".",REPT(" ",10)),9)),这里的10和9可以根据实际字符的长度调整,通常写100和99,基本可以涵盖所有字符,但因字符太长无法完全展示,这里用10和9代替,已经足够。
如果看不明白,我们可以对公式层层分解
第一步:
将所有的“.”替换成10个空格
C4=SUBSTITUTE(A4,".",REPT(" ",10))
第二步:取最右边9位字符
D4=RIGHT(C4,9)
第三步:去除多余的空格
E4=TRIM(D4)
2 解法二
将代码按分隔符“.”进行分列,然后取每行最后一个字符:
F2=LOOKUP(1,0/(B2:E2<>""),B2:E2)
3 解法三
第一步:
将所有分隔符替换成空值
B4-=SUBSTITUTE(A4,".","")
第二步:
计算分隔符的个数
C4=LEN(A4)-LEN(B4)
第三步:
将最后一个分隔符替换成“*”
D4=SUBSTITUTE(A4,".","*",C4)
第四步:
查找“*”出现的位置
E4=FIND("*",D4)
第五步:
返回“*”后面的字符
F4=RIGHT(D4,LEN(D4)-E4)
也可以将上述步骤合并成一个复合公式:
G4=RIGHT(SUBSTITUTE(A4,".","*",LEN(A4)-LEN(SUBSTITUTE(A4,".",""))),LEN(SUBSTITUTE(A4,".","*",LEN(A4)-LEN(SUBSTITUTE(A4,".",""))))-FIND("*",SUBSTITUTE(A4,".","*",LEN(A4)-LEN(SUBSTITUTE(A4,".","")))))
是不是头大了?我们追求的什么?是快速解决问题,而不是一步解决所有的问题,这对初学者非常重要,如果你理解不了,就尝试加辅助列,理解起来会容易得多。
总结
Rept(字符,重复次数):将字符重复几次
Substitute(文本串,原字符,新字符,替换第几个):将文本串的原字符由新字符代替,可以全部代替,也可以选择替换第几个。
Len(文本串):计算文本串的字符长度
Right(文本,个数):取文本串右边几个字符
Trim(文本串):去除文本串的多余空格
组合嵌套函数需要清晰的逻辑和函数调用能力,如果单个函数都不能很好的使用,那就加辅助列吧。
END